{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1a8c4e93",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"0\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "68b8cea3",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import random\n",
    "import torch.optim as optim\n",
    "from tqdm.notebook import tqdm\n",
    "# from tqdm import tqdm\n",
    "import torch.nn.functional as F\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import torchvision\n",
    "import matplotlib.pyplot as plt\n",
    "from torch.utils.data import Dataset, DataLoader, Subset\n",
    "from utils.dataset_utils_TEST import CombinedDataset, SubsetDataset\n",
    "from utils.parameters import My_Params\n",
    "from synthesizers.synthesizer import Synthesizer\n",
    "from synthesizers.pattern_synthesizer import PatternSynthesizer\n",
    "from synthesizers.blend_synthesizer import BlendSynthesizer\n",
    "from synthesizers.inputaware_synthesizer_imagenet import InputAwareSynthesizer\n",
    "from synthesizers.wanet_synthesizer_imagenet import WaNetSynthesizer\n",
    "# from synthesizers.CL_synthesizer import CLSynthesizer\n",
    "from synthesizers.CL_synthesizer import CLSynthesizer\n",
    "from tasks.task import Task\n",
    "from tasks.cifar10_task import Cifar10Task\n",
    "from tasks.imagenet_task import ImagenetTask\n",
    "from tasks.imagenet10_task import Imagenet10Task\n",
    "from tasks.imagenet100_task import Imagenet100Task\n",
    "from tasks.gtsrb_task import GtsrbTask\n",
    "from utils.utils import show_opt_input, show_opt_input_signed, detect_malicious_threshold\n",
    "from utils.utils import evaluate_detect, evaluate_class ,evaluate\n",
    "from models.model import SCELoss\n",
    "import torch.multiprocessing as mp\n",
    "from sklearn.manifold import TSNE\n",
    "from torchvision.transforms import ToTensor, Compose, Normalize,RandomHorizontalFlip,RandomCrop\n",
    "\n",
    "from utils.training import Trainer\n",
    "\n",
    "from models.EnsembleModel import EnsembleResNet, EnsembleAlexNet\n",
    "from models.resnet_cifar import BasicBlock, Bottleneck\n",
    "from models.model import CrossEntropyLoss_soft\n",
    "from utils.utils2 import get_filtered_data\n",
    "from utils.utils2 import cosine_similarity2, get_cosine_similarity_matrix, CustomJSONEncoder, save_model_and_variables, load_model_and_variables,CustomDataset, get_inspectionandclean_set,train_model,evaluate_bd\n",
    "mp.set_start_method('spawn', force=True)\n",
    "\n",
    "from utils.utils_mspc import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9a112dd5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Files already downloaded and verified\n",
      "Files already downloaded and verified\n"
     ]
    },
    {
     "ename": "TypeError",
     "evalue": "ResNet.__init__() got an unexpected keyword argument 'pretrained'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[5], line 4\u001b[0m\n\u001b[1;32m      2\u001b[0m param\u001b[38;5;241m.\u001b[39mdata_path \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m/home/star/sda1/data/1744ecab-59b5-4839-9124-a5d97b52e660/datasets/cifar10\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m      3\u001b[0m \u001b[38;5;66;03m# task = Imagenet10Task(param)\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m task \u001b[38;5;241m=\u001b[39m \u001b[43mCifar10Task\u001b[49m\u001b[43m(\u001b[49m\u001b[43mparam\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m      5\u001b[0m synthesizer \u001b[38;5;241m=\u001b[39m PatternSynthesizer(task)\n",
      "File \u001b[0;32m~/sda1/backdoors101-master/tasks/task.py:45\u001b[0m, in \u001b[0;36mTask.__init__\u001b[0;34m(self, params)\u001b[0m\n\u001b[1;32m     43\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, params: Params):\n\u001b[1;32m     44\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparams \u001b[38;5;241m=\u001b[39m params\n\u001b[0;32m---> 45\u001b[0m     \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minit_task\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m~/sda1/backdoors101-master/tasks/task.py:49\u001b[0m, in \u001b[0;36mTask.init_task\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m     47\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21minit_task\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m     48\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mload_data()\n\u001b[0;32m---> 49\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmodel \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbuild_model\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     50\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mresume_model()\n\u001b[1;32m     51\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmodel \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmodel\u001b[38;5;241m.\u001b[39mto(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparams\u001b[38;5;241m.\u001b[39mdevice)\n",
      "Cell \u001b[0;32mIn[4], line 69\u001b[0m, in \u001b[0;36mCifar10Task.build_model\u001b[0;34m(self, shallow)\u001b[0m\n\u001b[1;32m     67\u001b[0m     model\u001b[38;5;241m.\u001b[39mfc \u001b[38;5;241m=\u001b[39m nn\u001b[38;5;241m.\u001b[39mLinear(\u001b[38;5;241m512\u001b[39m, \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclasses))\n\u001b[1;32m     68\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 69\u001b[0m     model \u001b[38;5;241m=\u001b[39m \u001b[43mresnet18\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpretrained\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m     70\u001b[0m \u001b[43m                          \u001b[49m\u001b[43mnum_classes\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mclasses\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mshallow_linear\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mshallow\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     71\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m model\n",
      "File \u001b[0;32m~/sda1/backdoors101-master/models/resnet.py:193\u001b[0m, in \u001b[0;36mresnet18\u001b[0;34m(**kwargs)\u001b[0m\n\u001b[1;32m    192\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mresnet18\u001b[39m(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m--> 193\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mResNet\u001b[49m\u001b[43m(\u001b[49m\u001b[43mBasicBlock\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
      "\u001b[0;31mTypeError\u001b[0m: ResNet.__init__() got an unexpected keyword argument 'pretrained'"
     ]
    }
   ],
   "source": [
    "param = My_Params()\n",
    "param.data_path = '/home/star/sda1/data/1744ecab-59b5-4839-9124-a5d97b52e660/datasets/cifar10'\n",
    "# task = Imagenet10Task(param)\n",
    "task = Cifar10Task(param)\n",
    "synthesizer = PatternSynthesizer(task)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f82a8acf",
   "metadata": {},
   "outputs": [],
   "source": [
    "backdoor_set = SubsetDataset(\n",
    "    original_dataset=task.train_dataset,  # 原始训练数据集\n",
    "    r=0.1,                                # 污染比例\n",
    "    device=param.device, \n",
    "    synthesizer=synthesizer,\n",
    "    target=8,                             # 目标攻击类别，分类标签索引为8\n",
    "    only_posion_target=False,             # 是否只污染目标类别样本（此处对所有类别样本都有几率添加后门）\n",
    "    Save_sample=False,                    # 不保存生成的后门样本\n",
    "    clean_label=False,                    # 使用污染标签\n",
    "    attack_params=None,                   # 不适用额外的攻击参数配置\n",
    "    rm_tar=False                          # 不移除目标类原始样本\n",
    ")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "41b8620e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--- 步骤1: 选择一张原始图片 ---\n",
      "已选择索引为 100 的图片，其原始标签为: 4 (deer)\n",
      "\n",
      "--- 步骤2: 初始化各种攻击合成器 ---\n",
      "已创建 5 种攻击合成器，目标标签为: 8 (ship)\n",
      "\n",
      "--- 步骤3: 生成所有攻击版本的图片 ---\n",
      "正在应用 Pattern 攻击...\n",
      "正在应用 Blend 攻击...\n",
      "正在应用 WaNet 攻击...\n",
      "正在应用 Input-Aware 攻击...\n",
      "正在应用 CL 攻击...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers). Got range [-2.9802322e-08..1.0].\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers). Got range [0.4465..5.44726].\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "--- 步骤4: 可视化结果 ---\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABv0AAAFZCAYAAAC7euPzAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAit5JREFUeJzs3Xm8XtP5///3vuf7jJkjCTKhhmoRpQ2RUJoiVNUQLTVVfdpo0aJzE0NHY2rWElVBixg/hi8VNRYtVUNDkChB4iQ58z3v9fvDL+fjOOfsa0lOIne8no+HR5t7X2fttfde69pr7XUPgXPOCQAAAAAAAAAAAEDVin3UFQAAAAAAAAAAAACwZlj0AwAAAAAAAAAAAKoci34AAAAAAAAAAABAlWPRDwAAAAAAAAAAAKhyLPoBAAAAAAAAAAAAVY5FPwAAAAAAAAAAAKDKsegHAAAAAAAAAAAAVDkW/QAAAAAAAAAAAIAqx6IfAAAAAAAAAAAAUOVY9MOHMmvWLAVBsFp/e/XVVysIAi1evLh/K/U+ixcvVhAEuvrqq9faPgBgfRQEgU444YSPuhpAVQmCQLNmzfpI9j1lyhRNmTLlI9n32nLUUUeprq7uo64GAHhj/ATg4+jBBx9UEAS66aabPuqqAPiIrHqGfs4553zUVcFawKLfx8gLL7ygww8/XKNGjVI6ndbIkSP1ta99TS+88MJHXTUA65lVi/Sr/stkMtpiiy10wgknaOnSpR+6vF/+8pe69dZbe7z+2GOPadasWWpubl7zSq9Fd911l4Ig0MiRIxWGYY/tb731lmbNmqV//etfPbZdd911uuCCC9Z+JQH0yF1BEGjYsGHafffddffdd3/U1VsjlUpFI0eOVBAEfR7LJZdc0usbn1588UXNmjVrrb7xCkBPf/nLXxQEgW655ZYe2z796U8rCALNnz+/x7ZNN91UEydO/FD7mjJlioIg0H777ddj25o81Ons7NSsWbP04IMPfui/ZfwE9J9VY5x//OMfH3VVJK1ZbmhublYmk1EQBPrPf/7T/5VbD5x22mkKgkCHHnpor9uj5sF9zZ0BrLlXX31Vxx9/vMaNG6dMJqOGhgbtsssumj17tnK5XFfcmDFjNG3atDXa1yWXXKIgCLTzzjv3uj1qjtbXvA7wxaLfx8S8efO0ww476K9//auOPvpoXXLJJTr22GM1f/587bDDDr1ORHvz05/+tFsS/DCOOOII5XI5jR49erX+HsC6d8YZZ+hPf/qTLrroIk2cOFGXXnqpPve5z6mzs/NDlRO16Hf66aev94t+c+fO1ZgxY/T222/rgQce6LH9rbfe0umnn85DK2A9sSp3XXPNNTrttNP07rvvap999tGdd975UVdttT3wwAN6++23NWbMGM2dO7fXmKhFv9NPP51FP2Ad23XXXSVJjzzySLfXW1tb9fzzzyuRSOjRRx/ttu2NN97QG2+80fW3H9add96pf/7zn6tX4V50dnbq9NNPX60H+4yfgA3XmuSGG2+8UUEQaKONNupzTFPNnHO6/vrrNWbMGN1xxx1qa2vrERM1D2bRD1g7/vd//1fbbrut/vKXv2i//fbThRdeqF/96lfadNNNdeqpp+rEE0/s1/2tGgc9+eSTeuWVV3psj5qjseiHNcWi38fAq6++qiOOOELjxo3Tv//9b5111lk69thjdeaZZ+rf//63xo0bpyOOOEKvvfZan2V0dHRIkhKJhDKZzGrVIx6Pd72bC0B12HvvvXX44YfrG9/4hq6++mqddNJJWrRokW677baPumqRPuyiZJSOjg7ddttt+t73vqftt99+g5yYAhuaVbnriCOO0CmnnKKHH35YyWRS119//UddtdV27bXXaocddtDJJ5+sW2+9tWtsBmD9NXLkSI0dO7bHot/jjz8u55wOPvjgHttW/Xt1Fv023XRTDRw4UKeffvrqV7qfMH4C0Jdrr71W++yzjw477DBdd911H3V1JKlfx1UPPvig3nzzTV111VUql8uaN29ev5UNYPUsWrRI06dP1+jRo/Xiiy9q9uzZOu644zRjxgxdf/31evHFF7XNNtv06/4ee+wxnXfeeRo6dCjjIKxzLPp9DJx99tnq7OzUFVdcoaFDh3bbNmTIEF1++eXq6OjQb3/7W0n/97t9L774or761a9q4MCBXZPO3n7TL5fL6bvf/a6GDBmi+vp67b///lqyZEmP38np7Tf9Vn1c+pFHHtFOO+2kTCajcePG6Zprrum2jxUrVuiUU07Rtttuq7q6OjU0NGjvvffWs88+249nCoBljz32kPTeAEaSzjnnHE2cOFGDBw9WNpvVhAkTevwuQBAE6ujo0B//+Meur9s76qijNGvWLJ166qmSpLFjx3Zte3+OuPbaazVhwgRls1kNGjRI06dP1xtvvNGt/ClTpuiTn/yk/vnPf2q33XZTTU2NfvzjH3f7KqsrrrhC48ePVzqd1mc+8xk99dRT3sd8yy23KJfL6eCDD9b06dM1b9485fP5ru0PPvigPvOZz0iSjj766K7juPrqqzVlyhT97//+r15//fWu18eMGSNJKhaL+vnPf64JEyaosbFRtbW1mjRpUq9f8xWGoWbPnq1tt91WmUxGQ4cO1Re/+EXz633OOussxWIxXXjhhd7HC2yIBgwYoGw2q0QiYcYuWbJExxxzjIYPH650Oq1tttlGV111VbeYVb+D8pe//EW/+MUvtPHGGyuTyejzn/98r+/iXJWDstmsdtppJz388MMfqv65XE633HKLpk+frkMOOUS5XK7Hmy/GjBmjF154QX/729+68s2UKVN09dVX6+CDD5Yk7b777l3bVr0z/7bbbtO+++6rkSNHKp1Oa/z48TrzzDNVqVR61OOJJ57QPvvso4EDB6q2tlaf+tSnNHv27Mi6/+tf/9LQoUM1ZcoUtbe3f6jjBjYEu+66q5555plu35by6KOPapttttHee++tv//9792++vLRRx9VEATaZZddJElz5szRHnvsoWHDhimdTmvrrbfWpZde2uu+6uvrdfLJJ+uOO+7Q008/bdatublZJ510kjbZZBOl02ltttlm+s1vftNVn8WLF3fNH08//fSu/OHzW6iMn4C1b9Vv6S5ZskQHHHCA6urqNHToUJ1yyind7uPvnxedf/75Gj16tLLZrCZPnqznn3++W5l9/ebwUUcd1dUP1yQ3/Pe//9XDDz+s6dOna/r06V0Pxldpbm5WPB7X7373u67XmpqaFIvFNHjwYDnnul7/1re+pY022qjr3w8//LAOPvhgbbrppkqn09pkk0108skn9/i2qlXn7dVXX9U+++yj+vp6fe1rX5P0Xt644IILtM022yiTyWj48OE6/vjjtXLlSvPYVpk7d6623npr7b777tpzzz17POyPmgf3NXeWpNdff13f/va39YlPfELZbFaDBw/WwQcf3OunhJqbm3XyySdrzJgxSqfT2njjjfX1r39dTU1Nfda7UCho2rRpamxs7HZNgA3Bb3/7W7W3t+vKK6/UiBEjemzfbLPN+vWTfnPnztXAgQO177776qCDDuqRB6LmaH3N66QP93w8n89r1qxZ2mKLLZTJZDRixAgdeOCBevXVV/ust3NO3/zmN5VKpXjDQpWzn3yg6t1xxx0aM2aMJk2a1Ov23XbbTWPGjNH//u//dnv94IMP1uabb65f/vKX3QZWH3TUUUfpL3/5i4444gh99rOf1d/+9jftu+++3vV75ZVXdNBBB+nYY4/VkUceqauuukpHHXWUJkyY0PUui9dee0233nqrDj74YI0dO1ZLly7V5ZdfrsmTJ+vFF1/UyJEjvfcHYPWtGhwMHjxYkjR79mztv//++trXvqZisagbbrhBBx98sO68886uPPCnP/1J3/jGN7TTTjvpm9/8piRp/Pjxqq2t1csvv6zrr79e559/voYMGSJJXRPIX/ziF/rZz36mQw45RN/4xjf07rvv6sILL9Ruu+2mZ555RgMGDOiq1/Lly7X33ntr+vTpOvzwwzV8+PCubdddd53a2tp0/PHHKwgC/fa3v9WBBx6o1157Tclk0jzmuXPnavfdd9dGG22k6dOn64c//KHuuOOOrgHaVlttpTPOOEM///nP9c1vfrMr106cOFGjRo1SS0uL3nzzTZ1//vmSpLq6OknvfbXXH/7wBx122GE67rjj1NbWpiuvvFJTp07Vk08+qe22266rDscee6yuvvpq7b333vrGN76hcrmshx9+WH//+9+144479lrvn/70p/rlL3+pyy+/XMcdd5x5nMCGpKWlRU1NTXLOadmyZbrwwgvV3t6uww8/PPLvli5dqs9+9rMKgkAnnHCChg4dqrvvvlvHHnusWltbddJJJ3WL//Wvf61YLKZTTjlFLS0t+u1vf6uvfe1reuKJJ7pirrzySh1//PGaOHGiTjrpJL322mvaf//9NWjQIG2yySZex3P77bervb1d06dP10YbbaQpU6Zo7ty5+upXv9oVc8EFF+g73/mO6urq9JOf/ESSNHz4cI0fP17f/e539bvf/U4//vGPtdVWW0lS1/9effXVqqur0/e+9z3V1dXpgQce0M9//nO1trbq7LPP7ir/vvvu07Rp0zRixAideOKJ2mijjfSf//xHd955Z58T5KeeekpTp07VjjvuqNtuu03ZbNbreIENya677qo//elPeuKJJ7oe2Dz66KOaOHGiJk6cqJaWFj3//PP61Kc+1bVtyy237BprXXrppdpmm220//77K5FI6I477tC3v/1thWGoGTNm9NjfiSeeqPPPP1+zZs3S7bff3me9Ojs7NXnyZC1ZskTHH3+8Nt10Uz322GP60Y9+pLffflsXXHCBhg4dqksvvVTf+ta39OUvf1kHHnigJHXVNQrjJ2DdqFQqmjp1qnbeeWedc845uv/++3Xuuedq/Pjx+ta3vtUt9pprrlFbW5tmzJihfD6v2bNna4899tBzzz3Xbf5kWZPccP3116u2tlbTpk1TNpvV+PHjNXfu3K7fMR0wYIA++clP6qGHHtJ3v/tdSe99AjoIAq1YsaLbp3Eefvjhbs+5brzxRnV2dupb3/qWBg8erCeffFIXXnih3nzzTd14443d6lEulzV16lTtuuuuOuecc1RTUyNJOv7443X11Vfr6KOP1ne/+10tWrRIF110kZ555hk9+uij5vyxUCjo5ptv1ve//31J0mGHHaajjz5a77zzTtcC5YEHHtjnPLivubP03rjqscce0/Tp07Xxxhtr8eLFuvTSSzVlyhS9+OKLXcfQ3t6uSZMm6T//+Y+OOeYY7bDDDmpqatLtt9+uN998s2t/75fL5fSlL31J//jHP3T//fd3vSkD2FDccccdGjdu3If+zeTVNXfuXB144IFKpVI67LDDdOmll+qpp57q6lu77bZbn3O0vuZ1kv/z8UqlomnTpumvf/2rpk+frhNPPFFtbW2677779Pzzz3fllferVCo65phj9Oc//1m33HLLh3q2j/WQwwatubnZSXJf+tKXIuP2339/J8m1tra6mTNnOknusMMO6xG3atsq//znP50kd9JJJ3WLO+qoo5wkN3PmzK7X5syZ4yS5RYsWdb02evRoJ8k99NBDXa8tW7bMpdNp9/3vf7/rtXw+7yqVSrd9LFq0yKXTaXfGGWd0e02SmzNnTuTxAoi2qr/ef//97t1333VvvPGGu+GGG9zgwYNdNpt1b775pnPOuc7Ozm5/VywW3Sc/+Um3xx57dHu9trbWHXnkkT32c/bZZ/fIC845t3jxYhePx90vfvGLbq8/99xzLpFIdHt98uTJTpK77LLLusWuygeDBw92K1as6Hr9tttuc5LcHXfcYZ6HpUuXukQi4X7/+993vTZx4sQeOfWpp57qM/fsu+++bvTo0T1eL5fLrlAodHtt5cqVbvjw4e6YY47peu2BBx5wktx3v/vdHmWEYdj1/yW5GTNmOOec+/73v+9isZi7+uqrzWMENiSrctcH/0un0732hw+OVY499lg3YsQI19TU1C1u+vTprrGxsSvnzZ8/30lyW221Vbd+PHv2bCfJPffcc86593LisGHD3Hbbbdct7oorrnCS3OTJk72Oa9q0aW6XXXbp9veJRMItW7asW9w222zTa5k33nijk+Tmz5/fY9sH87hzzh1//PGupqbG5fN559x7+Wrs2LFu9OjRbuXKld1i35+HjjzySFdbW+ucc+6RRx5xDQ0Nbt999+0qB/g4euGFF5wkd+aZZzrnnCuVSq62ttb98Y9/dM45N3z4cHfxxRc755xrbW118XjcHXfccV1/31sfnTp1qhs3bly31yZPnuy22WYb55xzp59+upPk/vnPfzrn/m9MdPbZZ3fFn3nmma62tta9/PLL3cr54Q9/6OLxuPvvf//rnHPu3Xff7ZErLYyfgP63aozz1FNPdb125JFHOkndnok459z222/vJkyY0PXvVTng/fM455x74oknnCR38sknd702efLkXscSRx55ZLc+uTq5wTnntt12W/e1r32t698//vGP3ZAhQ1ypVOp6bcaMGW748OFd//7e977ndtttNzds2DB36aWXOuecW758uQuCwM2ePbsrrrd8+atf/coFQeBef/31bsciyf3whz/sFvvwww87SW7u3LndXr/nnnt6fb03N910k5PkFi5c6Jx7L69nMhl3/vnnd4vrax7sXN9z596O7/HHH3eS3DXXXNP12s9//nMnyc2bN69H/Kr8t2ose+ONN7q2tjY3efJkN2TIEPfMM8+YxwhUm5aWFq9n4+83evRot++++67W/v7xj384Se6+++5zzr3X7zbeeGN34okndouLmqP1Na/zfT5+1VVXOUnuvPPO61HGqjzw/vFhqVRyhx56qMtms+7ee+/9kEeM9RFf77mBW/WDwfX19ZFxq7a3trZ2vfY///M/Zvn33HOPJOnb3/52t9e/853veNdx66237vburKFDh+oTn/hEt98YTKfTisXea66VSkXLly9XXV2dPvGJT3h9dQ2A1bPnnntq6NCh2mSTTTR9+nTV1dXplltu0ahRoySp26c2Vq5cqZaWFk2aNGmN++W8efMUhqEOOeQQNTU1df230UYbafPNN+/xFU7pdFpHH310r2UdeuihGjhwYNe/V+WbqN8xXeWGG25QLBbTV77yla7XDjvsMN19990f6iteehOPx5VKpSS99zUyK1asULlc1o477tjt/N18880KgkAzZ87sUcYHv27ZOacTTjhBs2fP1rXXXqsjjzxyjeoIVKuLL75Y9913n+677z5de+212n333fWNb3wj8itKnHO6+eabtd9++8k51y33TJ06VS0tLT1y29FHH93Vj6We+eUf//iHli1bpv/5n//pFnfUUUepsbHR61iWL1+ue++9V4cddljXa1/5yle6vl50Tb0/j7e1tampqUmTJk1SZ2enFixYIEl65plntGjRIp100kndPmUt9cxDkjR//nxNnTpVn//85zVv3jyl0+k1ridQrbbaaisNHjy467f6nn32WXV0dHS903zixIl69NFHJb33W3+VSqXb7/m9v4+u+hTz5MmT9dprr6mlpaXXfZ544onmb/vdeOONmjRpkgYOHNgt3+25556qVCp66KGHVvuYGT8B69YHn91MmjSp17nOAQcc0DWPk6SddtpJO++8s+666661XkdJ+ve//63nnnuu25jmsMMOU1NTk+69996u1yZNmqSlS5fqpZdekvTeJ/p22203TZo0qesr0h955BE557o9S3p/vuzo6FBTU5MmTpwo55yeeeaZHvX54Cchb7zxRjU2NmqvvfbqlhcnTJigurq6Xr9G+IPmzp2rHXfcUZtttpmk95617bvvvv3ye17vP75SqaTly5drs80204ABA3rkv09/+tP68pe/3KOMD+a/lpYWfeELX9CCBQv04IMPdvu0NLChWPWs23o23l/mzp2r4cOHa/fdd5f0Xr879NBDdcMNN/T6Ewofhu/z8ZtvvllDhgzp9fn8B/NAsVjs+sauu+66S1/4whfWqI5YP/D1nhu4VQlt1eJfX3pbHBw7dqxZ/uuvv65YLNYjdtUAx8emm27a47WBAwd2mxCu+j2GSy65RIsWLeqWJFd99Q2A/nfxxRdriy22UCKR0PDhw/WJT3yia4AhSXfeeafOOuss/etf/1KhUOh6vbeHwB/GwoUL5ZzT5ptv3uv2D36tyqhRo7o9UH+/D+aYVQuAPg+drr32Wu20005avny5li9fLknafvvtVSwWdeONN3Z95crq+uMf/6hzzz1XCxYsUKlU6nr9/Tn11Vdf1ciRIzVo0CCzvGuuuUbt7e269NJLu02mgY+bnXbaqdtXtx122GHafvvtdcIJJ2jatGm95ot3331Xzc3NuuKKK3TFFVf0Wu6yZcu6/dvKL6+//rok9chlyWRS48aN8zqWP//5zyqVStp+++27/V7gzjvvrLlz5/b69X4fxgsvvKCf/vSneuCBB7q9+UtS14LCqq92/uQnP2mWl8/nte+++2rChAn6y1/+4vU7isCGLAgCTZw4UQ899JDCMNSjjz6qYcOGdc2XJk6cqIsuukiSuhb/3r/o9+ijj2rmzJl6/PHH1dnZ2a3slpaWXt9A0NjYqJNOOkkzZ87UM8880+3NT6ssXLhQ//73v3v85vsqH8x3HwbjJ2DdWfV7le/3wecpq/Q2t9piiy365U1Eq+RyuR5vSFj1tZbXXnutamtrNW7cuK4xTSaT0ZgxYzR37tyur5JbtZD38MMPa+ONN9Yzzzyjs846S0OHDtU555zTta2hoUGf/vSnu/bz3//+Vz//+c91++239zj+D9YpkUho44037vbawoUL1dLSomHDhvV6bFZebG5u1l133aUTTjih25htl1120c0336yXX35ZW2yxRWQZUXK5nH71q19pzpw5WrJkSbef4Xn/8b366qvd3nQR5aSTTlI+n9czzzzT9bWpwIamoaFBkv1svD9UKhXdcMMN2n333bVo0aKu13feeWede+65+utf/7pGi2q+z8dfffVVfeITn/Cai/3qV79Se3u77r777l5/0xXViVn4Bq6xsVEjRozQv//978i4f//73xo1alRXIpS0zn53JR6P9/r6+wcwv/zlL/Wzn/1MxxxzjM4880wNGjRIsVhMJ510UrcfvgfQvz744Pz9Hn74Ye2///7abbfddMkll2jEiBFKJpOaM2eOrrvuujXabxiGCoJAd999d685YtXvuqwSla98ckxvFi5cqKeeekpS7xPkuXPnrtFDq2uvvVZHHXWUDjjgAJ166qkaNmyY4vG4fvWrX0X+sHKUXXbZRf/617900UUX6ZBDDvF60AV8HMRiMe2+++6aPXu2Fi5c2OtDjVXjicMPP7zPT3l88LdqVje/fBir3hm+yy679Lr9tdde815A/KDm5mZNnjxZDQ0NOuOMMzR+/HhlMhk9/fTT+sEPfrBaY6x0Oq199tlHt912m+655x5NmzZtteoGbEh23XVX3XHHHXruuee6fs9vlYkTJ+rUU0/VkiVL9Mgjj2jkyJFdffrVV1/V5z//eW255ZY677zztMkmmyiVSumuu+7S+eefH9lHV/223+mnn64LLrigx/YwDLXXXnvptNNO6/XvV/fBNOMnYN3qayyyuoIg6HUc4/vplD//+c89voHFOSfnnK6//np1dHRo66237vF3y5YtU3t7u+rq6jRy5EiNHTtWDz30kMaMGSPnnD73uc9p6NChOvHEE/X666/r4Ycf1sSJE7t94mWvvfbSihUr9IMf/EBbbrmlamtrtWTJEh111FE98uX7Py2zShiGGjZsWJ+fyuvrTRKr3HjjjSoUCjr33HN17rnn9tg+d+7cyE9gW77zne9ozpw5Oumkk/S5z31OjY2NCoJA06dPX+3nYl/60pd0ww036Ne//rWuueaaHucE2BA0NDRo5MiRev7559f6vh544AG9/fbbuuGGG3TDDTf02D537tw1WvRbG8/Hp06dqnvuuUe//e1vNWXKFGUymdWuH9YfLPp9DEybNk2///3v9cgjj3R71+gqDz/8sBYvXqzjjz/+Q5c9evRohWGoRYsWdZvUvf9dTf3hpptu0u67764rr7yy2+vNzc29/ggxgLXv5ptvViaT0b333tvtq9vmzJnTI7avT/719fr48ePlnNPYsWPX6N2Qa2Lu3LlKJpP605/+1GMy/cgjj+h3v/ud/vvf/2rTTTeN/GRjX9tuuukmjRs3TvPmzesW88GvoRo/frzuvfderVixwnwItdlmm3UN1L74xS/qr3/96zr7CgtgfVculyVJ7e3tvW4fOnSo6uvrValUtOeee/bLPkePHi3pvYfge+yxR9frpVJJixYt6vbu9N4sWrRIjz32mE444QRNnjy527YwDHXEEUfouuuu009/+lNJHz7XPvjgg1q+fLnmzZun3Xbbrdt+32/VD70///zz5rkJgkBz587Vl770JR188MG8YxTQ/31y75FHHtGjjz6qk046qWvbhAkTlE6n9eCDD+qJJ57QPvvs07XtjjvuUKFQ0O23397tk8U+XzG36tN+s2bN6vWNDOPHj1d7e7tXn/4wGD8B66+FCxf2eO3ll1/WmDFjuv49cODAXr8adNW3F6zSVx+dOnWq7rvvvh6v/+1vf9Obb76pM844Q1tttVW3bStXrtQ3v/lN3XrrrTr88MMlvfdpv4ceekhjx47Vdtttp/r6en36059WY2Oj7rnnHj399NPdFtCee+45vfzyy/rjH/+or3/9612v91aXvowfP17333+/dtlll9V6E/zcuXP1yU9+stevFb788st13XXXddV5dfPfkUce2W1BMZ/Pq7m5ucdx+C5uHHDAAfrCF76go446SvX19br00ku9/g6oNtOmTdMVV1yhxx9/XJ/73OfW2n7mzp2rYcOG6eKLL+6xbd68ebrlllt02WWXKZvNrnYe8Hk+Pn78eD3xxBMqlUo9vinrgz772c/qf/7nfzRt2jQdfPDBuuWWW/i2lg0Ab+H4GDj11FOVzWZ1/PHHd329yiorVqzQ//zP/6impkannnrqhy576tSpkqRLLrmk2+sXXnjh6le4F/F4vMe7zW688UYtWbKkX/cDwF88HlcQBN3e9bl48WLdeuutPWJra2t7TEZWvS6px7YDDzxQ8Xhcp59+eo++75zrkcvWhrlz52rSpEk69NBDddBBB3X7b1W+vP766yOPY9W23n5zZ9WDsPcf3xNPPKHHH3+8W9xXvvIVOed6fVdob+/C/dSnPqW77rpL//nPf7Tffvspl8t5HjGw4SqVSvp//+//KZVK9XjQtEo8HtdXvvIV3Xzzzb0+KHn33Xc/9H533HFHDR06VJdddpmKxWLX61dffXWv+eKDVr3T/LTTTuuRhw455BBNnjy527vRP2yu7S0PFYvFHuO6HXbYQWPHjtUFF1zQo4ze8lAqldK8efP0mc98Rvvtt5+efPJJ81iBDdmOO+6oTCajuXPnasmSJd0+6ZdOp7XDDjvo4osvVkdHR7c3afbWR1taWnp9g1VvVv0O5xlnnNFj2yGHHKLHH3+82+9ordLc3Nz1Romampqu13wwfgLWX7feemu3ZyhPPvmknnjiCe29995dr40fP14LFizoNu559tlnu75+eJW+csOIESO05557dvtP+r+v9jz11FN75IbjjjtOm2++ebcxzaRJk7R48WL9+c9/7vq6z1gspokTJ+q8885TqVTq9nt+veUG55xmz57tfX4OOeQQVSoVnXnmmT22lcvlyDz4xhtv6KGHHtIhhxzS4/gOOuggHX300XrllVf0xBNPSLLzX2+v9/Zc7MILL+zxKcyvfOUrevbZZ3XLLbf0KKO3/Pf1r39dv/vd73TZZZfpBz/4QZ/HCFSz0047TbW1tfrGN76hpUuX9tj+6quvfqh80ZtcLqd58+Zp2rRpveaBE044QW1tbbr99tsl9V8e6O35+Fe+8hU1NTV1fYX8+/WWB/bcc0/dcMMNuueee3TEEUfwrXobAJZtPwY233xz/fGPf9TXvvY1bbvttjr22GM1duxYLV68WFdeeaWampp0/fXXd72L+8OYMGGCvvKVr+iCCy7Q8uXL9dnPflZ/+9vf9PLLL0ta89/1WmXatGk644wzdPTRR2vixIl67rnnNHfu3NX+OisAa27ffffVeeedpy9+8Yv66le/qmXLluniiy/WZptt1uMrhSdMmKD7779f5513XtfXtey8886aMGGCJOknP/mJpk+frmQyqf3220/jx4/XWWedpR/96EdavHixDjjgANXX12vRokW65ZZb9M1vflOnnHLKWju2J554Qq+88opOOOGEXrePGjVKO+ywg+bOnasf/OAHGj9+vAYMGKDLLrtM9fX1qq2t1c4776yxY8dqwoQJ+vOf/6zvfe97+sxnPqO6ujrtt99+mjZtmubNm6cvf/nL2nfffbVo0SJddtll2nrrrbt9Emn33XfXEUccod/97ndauHChvvjFLyoMQz388MPafffde63jZz/7Wd12223aZ599dNBBB+nWW281390FbEjuvvtuLViwQNJ7Xxd13XXXaeHChfrhD3/Y7avMP+jXv/615s+fr5133lnHHXectt56a61YsUJPP/207r//fq1YseJD1SOZTOqss87S8ccfrz322EOHHnqoFi1apDlz5niNYebOnavttttOm2yySa/b999/f33nO9/R008/rR122EETJkzQpZdeqrPOOkubbbaZhg0bpj322EPbbbed4vG4fvOb36ilpUXpdFp77LGHJk6cqIEDB+rII4/Ud7/7XQVBoD/96U89JoKxWEyXXnqp9ttvP2233XY6+uijNWLECC1YsEAvvPBCr4sG2WxWd955p/bYYw/tvffe+tvf/ub1m4DAhiiVSukzn/mMHn74YaXT6a7xzyoTJ07s+uTG+xf9vvCFLyiVSmm//fbT8ccfr/b2dv3+97/XsGHD9Pbbb5v7bWxs1Iknntjrwtepp56q22+/XdOmTdNRRx2lCRMmqKOjQ88995xuuukmLV68WEOGDFE2m9XWW2+tP//5z9piiy00aNAgffKTn+y1PzN+AtZvm222mXbddVd961vfUqFQ0AUXXKDBgwd3+5rfY445Ruedd56mTp2qY489VsuWLdNll12mbbbZpttv/36Y3FAoFHTzzTdrr7326vNr4/bff3/Nnj1by5Yt07Bhw7oW9F566SX98pe/7IrbbbfddPfddyudTuszn/lM1+tbbrmlxo8fr1NOOUVLlixRQ0ODbr75Zq/fcV9l8uTJOv744/WrX/1K//rXv/SFL3xByWRSCxcu1I033qjZs2froIMO6vVvr7vuOjnntP/++/e6fZ999lEikdDcuXMj58G1tbV9zp2nTZumP/3pT2psbNTWW2+txx9/XPfff3+33/GS3svvN910kw4++GAdc8wxmjBhglasWKHbb79dl112Wa/fNHHCCSeotbVVP/nJT9TY2Kgf//jH3ucNqAbjx4/Xddddp0MPPVRbbbWVvv71r+uTn/ykisWiHnvsMd1444066qijuv3NK6+8orPOOqtHWdtvv33Xb5C+3+233662trY+88BnP/tZDR06VHPnztWhhx7a5xxt2LBhfc7rfJ+Pf/3rX9c111yj733ve3ryySc1adIkdXR06P7779e3v/1tfelLX+pRvwMOOEBz5szR17/+dTU0NOjyyy//EGcY6x2Hj41///vf7rDDDnMjRoxwyWTSbbTRRu6www5zzz33XLe4mTNnOknu3Xff7VHGqm3v19HR4WbMmOEGDRrk6urq3AEHHOBeeuklJ8n9+te/7oqbM2eOk+QWLVrU9dro0aPdvvvu22M/kydPdpMnT+76dz6fd9///vfdiBEjXDabdbvssot7/PHHe8QtWrTISXJz5sz5cCcHQDer+utTTz0VGXfllVe6zTff3KXTabflllu6OXPm9JonFixY4HbbbTeXzWadJHfkkUd2bTvzzDPdqFGjXCwW65Ejbr75Zrfrrru62tpaV1tb67bccks3Y8YM99JLL3XFTJ482W2zzTY96rYqH5x99tk9tklyM2fO7PO4vvOd7zhJ7tVXX+0zZtasWU6Se/bZZ51zzt12221u6623dolEolseam9vd1/96lfdgAEDnCQ3evRo55xzYRi6X/7yl2706NEunU677bff3t15553uyCOP7IpZpVwuu7PPPtttueWWLpVKuaFDh7q9997b/fOf/+x2TDNmzOj2d7fddptLJBLu0EMPdZVKpc9jATYUq3LX+//LZDJuu+22c5deeqkLw7BbfG+5YOnSpW7GjBluk0026Rovff7zn3dXXHFFV8z8+fOdJHfjjTd2+9u+xiGXXHKJGzt2rEun027HHXd0Dz30UI8xzAf985//dJLcz372sz5jFi9e7CS5k08+2Tnn3DvvvOP23XdfV19f7yR1K//3v/+9GzdunIvH406Smz9/vnPOuUcffdR99rOfddls1o0cOdKddtpp7t577+0Ws8ojjzzi9tprL1dfX+9qa2vdpz71KXfhhRd2bT/yyCNdbW1tt79pampyW2+9tdtoo43cwoUL+zwWYEP3ox/9yElyEydO7LFt3rx5TpKrr6935XK527bbb7/dfepTn3KZTMaNGTPG/eY3v3FXXXVVjzFTX+OhlStXusbGxl7HRG1tbe5HP/qR22yzzVwqlXJDhgxxEydOdOecc44rFotdcY899pibMGGCS6VSkWMoxk/A2tPb/Ky3+65zPZ/bvH9edO6557pNNtnEpdNpN2nSpK6++H7XXnutGzdunEulUm677bZz9957b699zDc33HzzzU6Su/LKK/s8vgcffNBJcrNnz+56bdiwYU6SW7p0addrjzzyiJPkJk2a1KOMF1980e25556urq7ODRkyxB133HHu2Wef7TE26+u8rXLFFVe4CRMmuGw26+rr6922227rTjvtNPfWW2/1+Tfbbrut23TTTfvc7pxzU6ZMccOGDXOlUsk51/c8uK+588qVK93RRx/thgwZ4urq6tzUqVPdggUL3OjRo7vNr51zbvny5e6EE05wo0aNcqlUym288cbuyCOPdE1NTc65vseyp512mpPkLrrooshjAarVyy+/7I477jg3ZswYl0qlXH19vdtll13chRde6PL5fFfc6NGje8wrV/137LHH9lr2fvvt5zKZjOvo6Ohz/0cddZRLJpNdfbGvOVpf8zrf5+POOdfZ2el+8pOfuLFjx3bNaw866KCucVpfz8wuueQSJ8mdcsopH+bUYj0TONfLZzqBNfSvf/1L22+/va699lp97Wtf+6irAwAAAAAA8LGzePFijR07VmefffZa/bYUAACwfuA3/bDGevu9gwsuuECxWEy77bbbR1AjAAAAAAAAAACAjxd+0w9r7Le//a3++c9/avfdd1cikdDdd9+tu+++W9/85jf7/A0aAAAAAAAAAAAA9B8W/bDGJk6cqPvuu09nnnmm2tvbtemmm2rWrFn6yU9+8lFXDQAAAAAAAAAA4GOB3/QDAAAAAAAAAAAAqhy/6QcAAAAAAAAAAABUORb9AAAAAAAAAAAAgCrHoh+8LF68WEEQ6Jxzzum3Mh988EEFQaAHH3yw38oEAAAAAAAAAAD4OGLRbwN29dVXKwgC/eMf//ioq7JO7LXXXgqCQCeccMJHXRUAvQiCwOu/9e2NAI899phmzZql5ubmNSonDENddtll2m677VRXV6fhw4dr77331mOPPdY/FQWwxshT5ClgfUaOIkcB6zvyFHkKWJ+Ro8hRHxeJj7oCQH+YN2+eHn/88Y+6GgAi/OlPf+r272uuuUb33Xdfj9e32mqrdVkt02OPPabTTz9dRx11lAYMGLDa5Zx66qk677zzdPjhh+vb3/62mpubdfnll2vy5Ml69NFHtdNOO/VfpQGsFvIUeQpYn5GjyFHA+o48RZ4C1mfkKHLUxwWLfqh6+Xxe3//+9/WDH/xAP//5zz/q6gDow+GHH97t33//+99133339Xh9dTjnlM/nlc1m17istaFcLuvSSy/VQQcd1G0wefDBB2vcuHGaO3cugytgPUCeIk8B6zNyFDkKWN+Rp8hTwPqMHEWO+rjg6z0/5orFon7+859rwoQJamxsVG1trSZNmqT58+f3+Tfnn3++Ro8erWw2q8mTJ+v555/vEbNgwQIddNBBGjRokDKZjHbccUfdfvvtZn06Ozu1YMECNTU1eR/Db3/7W4VhqFNOOcX7bwCsn+bMmaM99thDw4YNUzqd1tZbb61LL720R9yYMWM0bdo03Xvvvdpxxx2VzWZ1+eWXS5Jef/117b///qqtrdWwYcN08skn69577+31KxqeeOIJffGLX1RjY6Nqamq63t20yqxZs3TqqadKksaOHdv1VQ+LFy+WJDU1NWnBggXq7OyMPK5SqaRcLqfhw4d3e33YsGGKxWLr7aAQQE/kKQDrM3IUgPUdeQrA+owchQ0Bn/T7mGttbdUf/vAHHXbYYTruuOPU1tamK6+8UlOnTtWTTz6p7bbbrlv8Nddco7a2Ns2YMUP5fF6zZ8/WHnvsoeeee64rabzwwgvaZZddNGrUKP3whz9UbW2t/vKXv+iAAw7QzTffrC9/+ct91ufJJ5/U7rvvrpkzZ2rWrFlm/f/73//q17/+ta666iqSE7ABuPTSS7XNNtto//33VyKR0B133KFvf/vbCsNQM2bM6Bb70ksv6bDDDtPxxx+v4447Tp/4xCfU0dGhPfbYQ2+//bZOPPFEbbTRRrruuut6fSPDAw88oL333lsTJkzQzJkzFYvFugZ3Dz/8sHbaaScdeOCBevnll3X99dfr/PPP15AhQyRJQ4cOlSRddNFFOv300zV//nxNmTKlz+PKZrPaeeeddfXVV+tzn/ucJk2apObmZp155pkaOHCgvvnNb/bfSQSwVpGnAKzPyFEA1nfkKQDrM3IUNggOG6w5c+Y4Se6pp57qM6ZcLrtCodDttZUrV7rhw4e7Y445puu1RYsWOUkum826N998s+v1J554wklyJ598ctdrn//85922227r8vl812thGLqJEye6zTffvOu1+fPnO0lu/vz5PV6bOXOm1zEedNBBbuLEiV3/luRmzJjh9bcAPlozZsxwH7wNdXZ29oibOnWqGzduXLfXRo8e7SS5e+65p9vr5557rpPkbr311q7Xcrmc23LLLbvlmzAM3eabb+6mTp3qwjDstv+xY8e6vfbaq+u1s88+20lyixYt6lG3mTNn9shjfVm4cKHbYYcdnKSu/8aNG+cWLFhg/i2AjwZ5ijwFrM/IUeQoYH1HniJPAeszchQ5akPF13t+zMXjcaVSKUlSGIZasWKFyuWydtxxRz399NM94g844ACNGjWq69877bSTdt55Z911112SpBUrVuiBBx7QIYccora2NjU1NampqUnLly/X1KlTtXDhQi1ZsqTP+kyZMkXOOa9P+c2fP18333yzLrjggg930ADWW+//xG5LS4uampo0efJkvfbaa2ppaekWO3bsWE2dOrXba/fcc49GjRql/fffv+u1TCaj4447rlvcv/71Ly1cuFBf/epXtXz58q5c1dHRoc9//vN66KGHFIahWd9Zs2bJORf5bqpV6uvrtc0222jGjBmaN2+eLrnkEpXLZR1wwAEf6iuNAXy0yFMA1mfkKADrO/IUgPUZOQobAr7eE/rjH/+oc889VwsWLFCpVOp6fezYsT1iN9988x6vbbHFFvrLX/4iSXrllVfknNPPfvYz/exnP+t1f8uWLeu2cLg6yuWyvvvd7+qII47QZz7zmTUqC8D649FHH9XMmTP1+OOP9/g+8paWFjU2Nnb9u7cc9frrr2v8+PEKgqDb65tttlm3fy9cuFCSdOSRR/ZZl5aWFg0cOPBDH0NvyuWy9txzT02ZMkUXXnhh1+t77rmnttlmG5199tn6zW9+0y/7ArB2kacArM/IUQDWd+QpAOszchQ2BCz6fcxde+21Ouqoo3TAAQfo1FNP1bBhwxSPx/WrX/1Kr7766ocub9U7EE455ZQe73RY5YNJbnVcc801eumll3T55Zd3/XDpKm1tbVq8eLGGDRummpqaNd4XgHXj1Vdf1ec//3ltueWWOu+887TJJpsolUrprrvu0vnnn9/jHU5r8jueq8o6++yze/x26Sp1dXWrXf4HPfTQQ3r++ed13nnndXt9880311ZbbdXtR5oBrL/IUwDWZ+QoAOs78hSA9Rk5ChsKFv0+5m666SaNGzdO8+bN6/YOhJkzZ/Yav+pdCO/38ssva8yYMZKkcePGSZKSyaT23HPP/q/w/++///2vSqWSdtlllx7brrnmGl1zzTW65ZZbdMABB6y1OgDoX3fccYcKhYJuv/12bbrppl2v9/Zjx30ZPXq0XnzxRTnnuuW0V155pVvc+PHjJUkNDQ1mrvrgu7NWx9KlSyVJlUqlx7ZSqaRyubzG+wCw9pGnAKzPyFEA1nfkKQDrM3IUNhT8pt/HXDwelyQ557pee+KJJ/T444/3Gn/rrbd2+02+J598Uk888YT23ntvSdKwYcM0ZcoUXX755Xr77bd7/P27774bWZ/Ozk4tWLDA/B7h6dOn65ZbbunxnyTts88+uuWWW7TzzjtHlgFg/dJbPmppadGcOXO8y5g6daqWLFmi22+/veu1fD6v3//+993iJkyYoPHjx+ucc85Re3t7j3Len6tqa2slSc3NzT3impqatGDBgh5f+fBBW2yxhSTphhtu6Pb6008/rZdeeknbb7999IEBWC+QpwCsz8hRANZ35CkA6zNyFDYUfNLvY+Cqq67SPffc0+P1E088UdOmTdO8efP05S9/Wfvuu68WLVqkyy67TFtvvXWvCWezzTbTrrvuqm9961sqFAq64IILNHjwYJ122mldMRdffLF23XVXbbvttjruuOM0btw4LV26VI8//rjefPNNPfvss33W9cknn9Tuu++umTNnatasWX3Gbbnlltpyyy173TZ27Fg+4QdUoS984QtKpVLab7/9dPzxx6u9vV2///3vNWzYsF7fRNCb448/XhdddJEOO+wwnXjiiRoxYoTmzp2rTCYj6f/eHRWLxfSHP/xBe++9t7bZZhsdffTRGjVqlJYsWaL58+eroaFBd9xxh6T3BmKS9JOf/ETTp09XMpnUfvvtp9raWl100UU6/fTTNX/+/MgfTZ4wYYL22msv/fGPf1Rra6u+8IUv6O2339aFF16obDark046afVPHIB1hjwFYH1GjgKwviNPAVifkaOwwXDYYM2ZM8dJ6vO/N954w4Vh6H75y1+60aNHu3Q67bbffnt35513uiOPPNKNHj26q6xFixY5Se7ss8925557rttkk01cOp12kyZNcs8++2yPfb/66qvu61//uttoo41cMpl0o0aNctOmTXM33XRTV8z8+fOdJDd//vwer82cOXO1jlmSmzFjxmr9LYB1a8aMGe6Dt6Hbb7/dfepTn3KZTMaNGTPG/eY3v3FXXXWVk+QWLVrUFTd69Gi377779lrua6+95vbdd1+XzWbd0KFD3fe//3138803O0nu73//e7fYZ555xh144IFu8ODBLp1Ou9GjR7tDDjnE/fWvf+0Wd+aZZ7pRo0a5WCzWrS4zZ87skcf60tnZ6c444wy39dZbu2w26xobG920adPcM888Y/4tgI8GeYo8BazPyFHkKGB9R54iTwHrM3IUOWpDFTj3vs+rAgCwAbrgggt08skn680339SoUaM+6uoAQA/kKQDrM3IUgPUdeQrA+owchXWJRT8AwAYll8spm812/Tufz2v77bdXpVLRyy+//BHWDADeQ54CsD4jRwFY35GnAKzPyFH4qPGbfgCADcqBBx6oTTfdVNttt51aWlp07bXXasGCBZo7d+5HXTUAkESeArB+I0cBWN+RpwCsz8hR+Kix6AcA2KBMnTpVf/jDHzR37lxVKhVtvfXWuuGGG3TooYd+1FUDAEnkKQDrN3IUgPUdeQrA+owchY8aX+8JAAAAAAAAAAAAVLnYR10BAAAAAAAAAAAAAGuGRT8AAAAAAAAAAACgyrHoBwAAAAAAAAAAAFS5hG/gD355g0eU/fOAsZi9zmjFBEFglrEuY8IwNGOsX06syKMuHuc3bhfjJXT2MXV0Nkduf3PJq2YZ7yxdbMa8/c5CM6bQ0W7G5FqWmzGZmkYzZvDAEZHb29tXmGU0DI4uQ5Li2awZ09HZZMYkEnafSySMfcXstte8/A0zplIumDFvPPNfM6Yv5Km+kad6R57qG3mqb6ubpy6a/cfV+rsPCmI+ecE4pz65xasy/VOO88lRRknOoy4++wnDihkTs86vpJhH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",
      "text/plain": [
       "<Figure size 1800x400 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# --- 接在您提供的代码之后 ---\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "from torchvision.transforms import transforms\n",
    "\n",
    "# 为了可视化，我们需要一个反标准化的函数。\n",
    "# 您的Cifar10Task类里已经有了，我们直接使用task.denormalize\n",
    "# 确保task对象和param对象已经被创建\n",
    "assert 'task' in locals(), \"请确保'task'对象已经被创建！\"\n",
    "assert 'param' in locals(), \"请确保'param'对象已经被创建！\"\n",
    "\n",
    "\n",
    "# ==============================================================================\n",
    "# 第一步：选择并准备一张原始图片\n",
    "# ==============================================================================\n",
    "print(\"--- 步骤1: 选择一张原始图片 ---\")\n",
    "# 我们可以从测试集中选择一张图片作为示例（例如，第100张）\n",
    "sample_idx = 100\n",
    "# 从 torchvision 数据集中获取原始的 PIL Image 和标签\n",
    "original_pil_image = task.test_dataset.data[sample_idx]\n",
    "original_label = task.test_dataset.targets[sample_idx]\n",
    "\n",
    "# 为了送入synthesizer，我们需要将其转换为经过标准化的Tensor\n",
    "# 这模拟了数据在进入模型前的状态\n",
    "transform_to_tensor = transforms.Compose([\n",
    "    transforms.ToTensor(),\n",
    "    task.normalize # 使用您task中定义的标准化\n",
    "])\n",
    "# original_tensor 的形状是 [3, 32, 32]\n",
    "original_tensor = transform_to_tensor(original_pil_image).to(param.device)\n",
    "\n",
    "print(f\"已选择索引为 {sample_idx} 的图片，其原始标签为: {original_label} ({task.classes[original_label]})\")\n",
    "\n",
    "\n",
    "# ==============================================================================\n",
    "# 第二步：初始化所有需要对比的攻击合成器\n",
    "# ==============================================================================\n",
    "print(\"\\n--- 步骤2: 初始化各种攻击合成器 ---\")\n",
    "# 设定一个统一的攻击目标类别\n",
    "target_label = 8 \n",
    "\n",
    "# 创建一个字典来存放所有的synthesizer\n",
    "synthesizers = {\n",
    "    \"Pattern\": PatternSynthesizer(task),\n",
    "    \"Blend\": BlendSynthesizer(task),\n",
    "    \"WaNet\": WaNetSynthesizer(task, dataset='cifar10'),\n",
    "    \"Input-Aware\": InputAwareSynthesizer(task, dataset='cifar10'),\n",
    "    \"CL\": CLSynthesizer(task)\n",
    "}\n",
    "print(f\"已创建 {len(synthesizers)} 种攻击合成器，目标标签为: {target_label} ({task.classes[target_label]})\")\n",
    "\n",
    "\n",
    "# ==============================================================================\n",
    "# 第三步：生成所有攻击版本的图片并准备可视化\n",
    "# ==============================================================================\n",
    "print(\"\\n--- 步骤3: 生成所有攻击版本的图片 ---\")\n",
    "poisoned_images_for_plot = {}\n",
    "\n",
    "for name, synthesizer in synthesizers.items():\n",
    "    print(f\"正在应用 {name} 攻击...\")\n",
    "    \n",
    "    # --- VVVV  修改核心：使用您提供的正确接口函数  VVVV ---\n",
    "    # 该接口处理单个样本，所以我们传入 original_tensor（形状为[C,H,W]）\n",
    "    poisoned_tensor_single = synthesizer.apply_backdoor_to_a_sample(\n",
    "        data=original_tensor.clone(), # 使用clone确保原始张量不被修改\n",
    "        label=target_label,\n",
    "        params={} # 传入一个空的params字典，以兼容接口\n",
    "    )\n",
    "    # --- ^^^^  修改结束  ^^^^ ---\n",
    "    \n",
    "    # --- 准备可视化 ---\n",
    "    # 1. 将图片从GPU移到CPU\n",
    "    poisoned_tensor_cpu = poisoned_tensor_single.cpu()\n",
    "    # 2. 反标准化，将像素值恢复到[0,1]范围，使其可以被正常显示\n",
    "    denormalized_tensor = task.denormalize(poisoned_tensor_cpu)\n",
    "    # 3. 转换维度顺序，从 (C, H, W) 变为 (H, W, C) 以便matplotlib显示\n",
    "    #    同时确保数据类型是numpy array\n",
    "    poisoned_images_for_plot[name] = denormalized_tensor.permute(1, 2, 0).numpy()\n",
    "\n",
    "# 同样处理原始图片，用于对比\n",
    "original_image_for_plot = task.denormalize(original_tensor.cpu()).permute(1, 2, 0).numpy()\n",
    "\n",
    "\n",
    "# ==============================================================================\n",
    "# 第四步：使用 Matplotlib 可视化对比\n",
    "# ==============================================================================\n",
    "print(\"\\n--- 步骤4: 可视化结果 ---\")\n",
    "num_images = len(poisoned_images_for_plot) + 1\n",
    "fig, axes = plt.subplots(1, num_images, figsize=(num_images * 3, 4)) # 动态调整画布大小\n",
    "\n",
    "# 显示原始图片\n",
    "axes[0].imshow(original_image_for_plot)\n",
    "axes[0].set_title(f\"Original\\nLabel: {original_label}\")\n",
    "axes[0].axis('off') # <--- 修正这里\n",
    "\n",
    "# 循环显示所有攻击后的图片\n",
    "for i, (name, img) in enumerate(poisoned_images_for_plot.items()):\n",
    "    ax = axes[i+1]\n",
    "    ax.imshow(img)\n",
    "    ax.set_title(f\"{name} Attack\\nTarget: {target_label}\")\n",
    "    ax.axis('off') # <--- 修正这里\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "97edda53",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--- 步骤1: 选择一张原始图片 ---\n",
      "已选择索引为 100 的图片，其原始标签为: 4 (deer)\n",
      "\n",
      "--- 步骤2: 初始化各种攻击合成器 ---\n",
      "已创建 5 种攻击合成器，目标标签为: 8 (ship)\n",
      "\n",
      "--- 步骤3: 生成所有攻击版本的图片 ---\n",
      "正在应用 Pattern 攻击...\n",
      "正在应用 Blend 攻击...\n",
      "正在应用 WaNet 攻击...\n",
      "正在应用 Input-Aware 攻击...\n",
      "正在应用 CL 攻击...\n",
      "\n",
      "--- 步骤4: 可视化结果 ---\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABv0AAAFZCAYAAAC7euPzAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAirlJREFUeJzs3Xm8XtP5///3vuf7jJkjCTKZVYsobYiE0hShqoZoqan4tNGiRecmho7G1Kwlqg5axPgxfKmosWipGpoKEiUikeHM97zX74/+cj6Oc86+luSE3PF6Ph4ebe59nbXX3nuta6+11z0EzjknAAAAAAAAAAAAAFUr9lFXAAAAAAAAAAAAAMDaYdEPAAAAAAAAAAAAqHIs+gEAAAAAAAAAAABVjkU/AAAAAAAAAAAAoMqx6AcAAAAAAAAAAABUORb9AAAAAAAAAAAAgCrHoh8AAAAAAAAAAABQ5Vj0AwAAAAAAAAAAAKoci34AAAAAAAAAAABAlWPRDx/IrFmzFATBGv3ttddeqyAItGjRov6t1HssWrRIQRDo2muvXWf7AID1URAEOumkkz7qagBVJQgCzZo16yPZ95QpUzRlypSPZN/rytFHH626urqPuhoA4I3xE4CPo4cfflhBEOiWW275qKsC4COy+hn6eeed91FXBesAi34fIy+99JKOOOIIjRo1Sul0WiNHjtRXv/pVvfTSSx911QCsZ1Yv0q/+L5PJaIstttBJJ52kpUuXfuDyfv7zn+v222/v8foTTzyhWbNmqbm5ee0rvQ7dc889CoJAI0eOVBiGPba//fbbmjVrlv7xj3/02HbDDTfooosuWveVBNAjdwVBoGHDhmmPPfbQvffe+1FXb61UKhWNHDlSQRD0eSyXXXZZr298evnllzVr1qx1+sYrAD396U9/UhAEuu2223ps+9SnPqUgCDRv3rwe2zbddFNNnDjxA+1rypQpCoJA+++/f49ta/NQp7OzU7NmzdLDDz/8gf+W8RPQf1aPcf72t7991FWRtHa5obm5WZlMRkEQ6F//+lf/V249cMYZZygIAh122GG9bo+aB/c1dwaw9l577TWdeOKJGjdunDKZjBoaGrTrrrtq9uzZyuVyXXFjxozRtGnT1mpfl112mYIg0C677NLr9qg5Wl/zOsAXi34fE3PnztWOO+6oP//5zzrmmGN02WWX6bjjjtO8efO044479joR7c2Pf/zjbknwgzjyyCOVy+U0evToNfp7AB++s846S3/4wx90ySWXaOLEibr88sv12c9+Vp2dnR+onKhFvzPPPHO9X/RramrSmDFjtGTJEj300EM9tr/99ts688wzeWgFrCdW567rrrtOZ5xxht59913tu+++uvvuuz/qqq2xhx56SEuWLNGYMWPU1NTUa0zUot+ZZ57Joh/wIdttt90kSY899li311tbW/Xiiy8qkUjo8ccf77btzTff1Jtvvtn1tx/U3Xffrb///e9rVuFedHZ26swzz1yjB/uMn4AN19rkhptvvllBEGijjTbqc0xTzZxzuvHGGzVmzBjdddddamtr6xETNQ9m0Q9YN/73f/9X2223nf70pz9p//3318UXX6xf/OIX2nTTTXX66afr5JNP7tf9rR4HPf3003r11Vd7bI+ao7Hoh7XFot/HwGuvvaYjjzxS48aN0z//+U+dc845Ou6443T22Wfrn//8p8aNG6cjjzxSr7/+ep9ldHR0SJISiYQymcwa1SMej3e9mwtAddhnn310xBFH6Otf/7quvfZanXLKKVq4cKHuuOOOj7pqkT7oomSUjo4O3XHHHfrOd76jHXbYYYOcmAIbmtW568gjj9Rpp52mRx99VMlkUjfeeONHXbU1dv3112vHHXfUqaeeqttvv71rbAZg/TVy5EiNHTu2x6Lfk08+KeecDjnkkB7bVv97TRb9Nt10Uw0cOFBnnnnmmle6nzB+AtCX66+/Xvvuu68OP/xw3XDDDR91dSSpX8dVDz/8sN566y1dc801KpfLmjt3br+VDWDNLFy4UNOnT9fo0aP18ssva/bs2Tr++OM1Y8YM3XjjjXr55Ze17bbb9uv+nnjiCV1wwQUaOnQo4yB86Fj0+xg499xz1dnZqauuukpDhw7ttm3IkCG68sor1dHRoV//+teS/u93+15++WV95Stf0cCBA7smnb39pl8ul9O3v/1tDRkyRPX19TrggAO0ePHiHr+T09tv+q3+uPRjjz2mnXfeWZlMRuPGjdN1113XbR8rV67Uaaedpu222051dXVqaGjQPvvso+eff74fzxQAy5577inpvwMYSTrvvPM0ceJEDR48WNlsVhMmTOjxuwBBEKijo0O///3vu75u7+ijj9asWbN0+umnS5LGjh3bte29OeL666/XhAkTlM1mNWjQIE2fPl1vvvlmt/KnTJmiT3ziE/r73/+u3XffXTU1NfrhD3/Y7ausrrrqKo0fP17pdFqf/vSn9cwzz3gf82233aZcLqdDDjlE06dP19y5c5XP57u2P/zww/r0pz8tSTrmmGO6juPaa6/VlClT9L//+7964403ul4fM2aMJKlYLOqnP/2pJkyYoMbGRtXW1mrSpEm9fs1XGIaaPXu2tttuO2UyGQ0dOlRf+MIXzK/3OeeccxSLxXTxxRd7Hy+wIRowYICy2awSiYQZu3jxYh177LEaPny40um0tt12W11zzTXdYlb/Dsqf/vQn/exnP9PGG2+sTCajz33uc72+i3N1Dspms9p555316KOPfqD653I53XbbbZo+fboOPfRQ5XK5Hm++GDNmjF566SX95S9/6co3U6ZM0bXXXqtDDjlEkrTHHnt0bVv9zvw77rhD++23n0aOHKl0Oq3x48fr7LPPVqVS6VGPp556Svvuu68GDhyo2tpaffKTn9Ts2bMj6/6Pf/xDQ4cO1ZQpU9Te3v6BjhvYEOy222567rnnun1byuOPP65tt91W++yzj/761792++rLxx9/XEEQaNddd5UkzZkzR3vuuaeGDRumdDqtbbbZRpdffnmv+6qvr9epp56qu+66S88++6xZt+bmZp1yyinaZJNNlE6ntdlmm+lXv/pVV30WLVrUNX8888wzu/KHz2+hMn4C1r3Vv6W7ePFiHXjggaqrq9PQoUN12mmndbuPv3dedOGFF2r06NHKZrOaPHmyXnzxxW5l9vWbw0cffXRXP1yb3PCf//xHjz76qKZPn67p06d3PRhfrbm5WfF4XL/5zW+6Xlu+fLlisZgGDx4s51zX69/4xje00UYbdf370Ucf1SGHHKJNN91U6XRam2yyiU499dQe31a1+ry99tpr2nfffVVfX6+vfvWrkv6bNy666CJtu+22ymQyGj58uE488UStWrXKPLbVmpqatM0222iPPfbQXnvt1eNhf9Q8uK+5syS98cYb+uY3v6ktt9xS2WxWgwcP1iGHHNLrp4Sam5t16qmnasyYMUqn09p44431ta99TcuXL++z3oVCQdOmTVNjY2O3awJsCH7961+rvb1dV199tUaMGNFj+2abbdavn/RramrSwIEDtd9+++nggw/ukQei5mh9zeukD/Z8PJ/Pa9asWdpiiy2UyWQ0YsQIHXTQQXrttdf6rLdzTieccIJSqRRvWKhy9pMPVL277rpLY8aM0aRJk3rdvvvuu2vMmDH63//9326vH3LIIdp8883185//vNvA6v2OPvpo/elPf9KRRx6pz3zmM/rLX/6i/fbbz7t+r776qg4++GAdd9xxOuqoo3TNNdfo6KOP1oQJE7reZfH666/r9ttv1yGHHKKxY8dq6dKluvLKKzV58mS9/PLLGjlypPf+AKy51YODwYMHS5Jmz56tAw44QF/96ldVLBZ100036ZBDDtHdd9/dlQf+8Ic/6Otf/7p23nlnnXDCCZKk8ePHq7a2Vq+88opuvPFGXXjhhRoyZIgkdU0gf/azn+knP/mJDj30UH3961/Xu+++q4svvli77767nnvuOQ0YMKCrXitWrNA+++yj6dOn64gjjtDw4cO7tt1www1qa2vTiSeeqCAI9Otf/1oHHXSQXn/9dSWTSfOYm5qatMcee2ijjTbS9OnT9f3vf1933XVX1wBt66231llnnaWf/vSnOuGEE7py7cSJEzVq1Ci1tLTorbfe0oUXXihJqqurk/Tfr/b63e9+p8MPP1zHH3+82tradPXVV2vq1Kl6+umntf3223fV4bjjjtO1116rffbZR1//+tdVLpf16KOP6q9//at22mmnXuv94x//WD//+c915ZVX6vjjjzePE9iQtLS0aPny5XLOadmyZbr44ovV3t6uI444IvLvli5dqs985jMKgkAnnXSShg4dqnvvvVfHHXecWltbdcopp3SL/+Uvf6lYLKbTTjtNLS0t+vWvf62vfvWreuqpp7pirr76ap144omaOHGiTjnlFL3++us64IADNGjQIG2yySZex3PnnXeqvb1d06dP10YbbaQpU6aoqalJX/nKV7piLrroIn3rW99SXV2dfvSjH0mShg8frvHjx+vb3/62fvOb3+iHP/yhtt56a0nq+t9rr71WdXV1+s53vqO6ujo99NBD+ulPf6rW1lade+65XeU/8MADmjZtmkaMGKGTTz5ZG220kf71r3/p7rvv7nOC/Mwzz2jq1KnaaaeddMcddyibzXodL7Ah2W233fSHP/xBTz31VNcDm8cff1wTJ07UxIkT1dLSohdffFGf/OQnu7ZttdVWXWOtyy+/XNtuu60OOOAAJRIJ3XXXXfrmN7+pMAw1Y8aMHvs7+eSTdeGFF2rWrFm68847+6xXZ2enJk+erMWLF+vEE0/UpptuqieeeEI/+MEPtGTJEl100UUaOnSoLr/8cn3jG9/Ql770JR100EGS1FXXKIyfgA9HpVLR1KlTtcsuu+i8887Tgw8+qPPPP1/jx4/XN77xjW6x1113ndra2jRjxgzl83nNnj1be+65p1544YVu8yfL2uSGG2+8UbW1tZo2bZqy2azGjx+vpqamrt8xHTBggD7xiU/okUce0be//W1J//0EdBAEWrlyZbdP4zz66KPdnnPdfPPN6uzs1De+8Q0NHjxYTz/9tC6++GK99dZbuvnmm7vVo1wua+rUqdptt9103nnnqaamRpJ04okn6tprr9Uxxxyjb3/721q4cKEuueQSPffcc3r88cfN+WOhUNCtt96q7373u5Kkww8/XMccc4zeeeedrgXKgw46qM95cF9zZ+m/46onnnhC06dP18Ybb6xFixbp8ssv15QpU/Tyyy93HUN7e7smTZqkf/3rXzr22GO14447avny5brzzjv11ltvde3vvXK5nL74xS/qb3/7mx588MGuN2UAG4q77rpL48aN+8C/mbymmpqadNBBBymVSunwww/X5Zdfrmeeeaarb+2+++59ztH6mtdJ/s/HK5WKpk2bpj//+c+aPn26Tj75ZLW1temBBx7Qiy++2JVX3qtSqejYY4/VH//4R912220f6Nk+1kMOG7Tm5mYnyX3xi1+MjDvggAOcJNfa2upmzpzpJLnDDz+8R9zqbav9/e9/d5LcKaec0i3u6KOPdpLczJkzu16bM2eOk+QWLlzY9dro0aOdJPfII490vbZs2TKXTqfdd7/73a7X8vm8q1Qq3faxcOFCl06n3VlnndXtNUluzpw5kccLINrq/vrggw+6d99917355pvupptucoMHD3bZbNa99dZbzjnnOjs7u/1dsVh0n/jEJ9yee+7Z7fXa2lp31FFH9djPueee2yMvOOfcokWLXDwedz/72c+6vf7CCy+4RCLR7fXJkyc7Se6KK67oFrs6HwwePNitXLmy6/U77rjDSXJ33XWXeR6WLl3qEomE++1vf9v12sSJE3vk1GeeeabP3LPffvu50aNH93i9XC67QqHQ7bVVq1a54cOHu2OPPbbrtYceeshJct/+9rd7lBGGYdf/l+RmzJjhnHPuu9/9rovFYu7aa681jxHYkKzOXe//L51O99of3j9WOe6449yIESPc8uXLu8VNnz7dNTY2duW8efPmOUlu66237taPZ8+e7SS5F154wTn335w4bNgwt/3223eLu+qqq5wkN3nyZK/jmjZtmtt11127/X0ikXDLli3rFrftttv2WubNN9/sJLl58+b12Pb+PO6ccyeeeKKrqalx+XzeOffffDV27Fg3evRot2rVqm6x781DRx11lKutrXXOOffYY4+5hoYGt99++3WVA3wcvfTSS06SO/vss51zzpVKJVdbW+t+//vfO+ecGz58uLv00kudc861tra6eDzujj/++K6/762PTp061Y0bN67ba5MnT3bbbrutc865M88800lyf//7351z/zcmOvfcc7vizz77bFdbW+teeeWVbuV8//vfd/F43P3nP/9xzjn37rvv9siVFsZPQP9bPcZ55plnul476qijnKRuz0Scc26HHXZwEyZM6Pr36hzw3nmcc8499dRTTpI79dRTu16bPHlyr2OJo446qlufXJPc4Jxz2223nfvqV7/a9e8f/vCHbsiQIa5UKnW9NmPGDDd8+PCuf3/nO99xu+++uxs2bJi7/PLLnXPOrVixwgVB4GbPnt0V11u+/MUvfuGCIHBvvPFGt2OR5L7//e93i3300UedJNfU1NTt9fvuu6/X13tzyy23OEluwYIFzrn/5vVMJuMuvPDCbnF9zYOd63vu3NvxPfnkk06Su+6667pe++lPf+okublz5/aIX53/Vo9lb775ZtfW1uYmT57shgwZ4p577jnzGIFq09LS4vVs/L1Gjx7t9ttvvzXa39/+9jcnyT3wwAPOuf/2u4033tidfPLJ3eKi5mh9zet8n49fc801TpK74IILepSxOg+8d3xYKpXcYYcd5rLZrLv//vs/4BFjfcTXe27gVv9gcH19fWTc6u2tra1dr/3P//yPWf59990nSfrmN7/Z7fVvfetb3nXcZpttur07a+jQodpyyy27/cZgOp1WLPbf5lqpVLRixQrV1dVpyy239PrqGgBrZq+99tLQoUO1ySabaPr06aqrq9Ntt92mUaNGSVK3T22sWrVKLS0tmjRp0lr3y7lz5yoMQx166KFavnx5138bbbSRNt988x5f4ZROp3XMMcf0WtZhhx2mgQMHdv17db6J+h3T1W666SbFYjF9+ctf7nrt8MMP17333vuBvuKlN/F4XKlUStJ/v0Zm5cqVKpfL2mmnnbqdv1tvvVVBEGjmzJk9ynj/1y0753TSSSdp9uzZuv7663XUUUetVR2BanXppZfqgQce0AMPPKDrr79ee+yxh77+9a9HfkWJc0633nqr9t9/fznnuuWeqVOnqqWlpUduO+aYY7r6sdQzv/ztb3/TsmXL9D//8z/d4o4++mg1NjZ6HcuKFSt0//336/DDD+967ctf/nLX14uurffm8ba2Ni1fvlyTJk1SZ2en5s+fL0l67rnntHDhQp1yyindPmUt9cxDkjRv3jxNnTpVn/vc5zR37lyl0+m1ridQrbbeemsNHjy467f6nn/+eXV0dHS903zixIl6/PHHJf33t/4qlUq33/N7bx9d/SnmyZMn6/XXX1dLS0uv+zz55JPN3/a7+eabNWnSJA0cOLBbvttrr71UqVT0yCOPrPExM34CPlzvf3YzadKkXuc6Bx54YNc8TpJ23nln7bLLLrrnnnvWeR0l6Z///KdeeOGFbmOaww8/XMuXL9f999/f9dqkSZO0dOlS/fvf/5b030/07b777po0aVLXV6Q/9thjcs51e5b03nzZ0dGh5cuXa+LEiXLO6bnnnutRn/d/EvLmm29WY2Oj9t577255ccKECaqrq+v1a4Tfr6mpSTvttJM222wzSf991rbffvv1y+95vff4SqWSVqxYoc0220wDBgzokf8+9alP6Utf+lKPMt6f/1paWvT5z39e8+fP18MPP9zt09LAhmL1s27r2Xh/aWpq0vDhw7XHHntI+m+/O+yww3TTTTf1+hMKH4Tv8/Fbb71VQ4YM6fX5/PvzQLFY7PrGrnvuuUef//zn16qOWD/w9Z4buNUJbfXiX196WxwcO3asWf4bb7yhWCzWI3b1AMfHpptu2uO1gQMHdpsQrv49hssuu0wLFy7sliRXf/UNgP536aWXaosttlAikdDw4cO15ZZbdg0wJOnuu+/WOeeco3/84x8qFApdr/f2EPiDWLBggZxz2nzzzXvd/v6vVRk1alS3B+rv9f4cs3oB0Oeh0/XXX6+dd95ZK1as0IoVKyRJO+ywg4rFom6++eaur1xZU7///e91/vnna/78+SqVSl2vvzenvvbaaxo5cqQGDRpklnfdddepvb1dl19+ebfJNPBxs/POO3f76rbDDz9cO+ywg0466SRNmzat13zx7rvvqrm5WVdddZWuuuqqXstdtmxZt39b+eWNN96QpB65LJlMaty4cV7H8sc//lGlUkk77LBDt98L3GWXXdTU1NTr1/t9EC+99JJ+/OMf66GHHur25i9JXQsKq7/a+ROf+IRZXj6f13777acJEyboT3/6k9fvKAIbsiAINHHiRD3yyCMKw1CPP/64hg0b1jVfmjhxoi655BJJ6lr8e++i3+OPP66ZM2fqySefVGdnZ7eyW1paen0DQWNjo0455RTNnDlTzz33XLc3P622YMEC/fOf/+zxm++rvT/ffRCMn4APz+rfq3yv9z9PWa23udUWW2zRL28iWi2Xy/V4Q8Lqr7W8/vrrVVtbq3HjxnWNaTKZjMaMGaOmpqaur5JbvZD36KOPauONN9Zzzz2nc845R0OHDtV5553Xta2hoUGf+tSnuvbzn//8Rz/96U9155139jj+99cpkUho44037vbaggUL1NLSomHDhvV6bFZebG5u1j333KOTTjqp25ht11131a233qpXXnlFW2yxRWQZUXK5nH7xi19ozpw5Wrx4cbef4Xnv8b322mvd3nQR5ZRTTlE+n9dzzz3X9bWpwIamoaFBkv1svD9UKhXddNNN2mOPPbRw4cKu13fZZRedf/75+vOf/7xWi2q+z8dfe+01bbnlll5zsV/84hdqb2/Xvffe2+tvuqI6MQvfwDU2NmrEiBH65z//GRn3z3/+U6NGjepKhJI+tN9dicfjvb7+3gHMz3/+c/3kJz/Rscceq7PPPluDBg1SLBbTKaec0u2H7wH0r/c/OH+vRx99VAcccIB23313XXbZZRoxYoSSyaTmzJmjG264Ya32G4ahgiDQvffe22uOWP27LqtF5SufHNObBQsW6JlnnpHU+wS5qalprR5aXX/99Tr66KN14IEH6vTTT9ewYcMUj8f1i1/8IvKHlaPsuuuu+sc//qFLLrlEhx56qNeDLuDjIBaLaY899tDs2bO1YMGCXh9qrB5PHHHEEX1+yuP9v1Wzpvnlg1j9zvBdd9211+2vv/669wLi+zU3N2vy5MlqaGjQWWedpfHjxyuTyejZZ5/V9773vTUaY6XTae2777664447dN9992natGlrVDdgQ7Lbbrvprrvu0gsvvND1e36rTZw4UaeffroWL16sxx57TCNHjuzq06+99po+97nPaautttIFF1ygTTbZRKlUSvfcc48uvPDCyD66+rf9zjzzTF100UU9todhqL333ltnnHFGr3+/pg+mGT8BH66+xiJrKgiCXscxvp9O+eMf/9jjG1icc3LO6cYbb1RHR4e22WabHn+3bNkytbe3q66uTiNHjtTYsWP1yCOPaMyYMXLO6bOf/ayGDh2qk08+WW+88YYeffRRTZw4sdsnXvbee2+tXLlS3/ve97TVVluptrZWixcv1tFHH90jX7730zKrhWGoYcOG9fmpvL7eJLHazTffrEKhoPPPP1/nn39+j+1NTU2Rn8C2fOtb39KcOXN0yimn6LOf/awaGxsVBIGmT5++xs/FvvjFL+qmm27SL3/5S1133XU9zgmwIWhoaNDIkSP14osvrvN9PfTQQ1qyZIluuukm3XTTTT22NzU1rdWi37p4Pj516lTdd999+vWvf60pU6Yok8mscf2w/mDR72Ng2rRp+u1vf6vHHnus27tGV3v00Ue1aNEinXjiiR+47NGjRysMQy1cuLDbpO6972rqD7fccov22GMPXX311d1eb25u7vVHiAGse7feeqsymYzuv//+bl/dNmfOnB6xfX3yr6/Xx48fL+ecxo4du1bvhlwbTU1NSiaT+sMf/tBjMv3YY4/pN7/5jf7zn/9o0003jfxkY1/bbrnlFo0bN05z587tFvP+r6EaP3687r//fq1cudJ8CLXZZpt1DdS+8IUv6M9//vOH9hUWwPquXC5Lktrb23vdPnToUNXX16tSqWivvfbql32OHj1a0n8fgu+5555dr5dKJS1cuLDbu9N7s3DhQj3xxBM66aSTNHny5G7bwjDUkUceqRtuuEE//vGPJX3wXPvwww9rxYoVmjt3rnbfffdu+32v1T/0/uKLL5rnJggCNTU16Ytf/KIOOeQQ3jEK6P8+uffYY4/p8ccf1ymnnNK1bcKECUqn03r44Yf11FNPad999+3adtddd6lQKOjOO+/s9slin6+YW/1pv1mzZvX6Robx48ervb3dq09/EIyfgPXXggULerz2yiuvaMyYMV3/HjhwYK9fDbr62wtW66uPTp06VQ888ECP1//yl7/orbfe0llnnaWtt96627ZVq1bphBNO0O23364jjjhC0n8/7ffII49o7Nix2n777VVfX69PfepTamxs1H333adnn3222wLaCy+8oFdeeUW///3v9bWvfa3r9d7q0pfx48frwQcf1K677rpGb4JvamrSJz7xiV6/VvjKK6/UDTfc0FXnNc1/Rx11VLcFxXw+r+bm5h7H4bu4ceCBB+rzn/+8jj76aNXX1+vyyy/3+jug2kybNk1XXXWVnnzySX32s59dZ/tpamrSsGHDdOmll/bYNnfuXN1222264oorlM1m1zgP+DwfHz9+vJ566imVSqUe35T1fp/5zGf0P//zP5o2bZoOOeQQ3XbbbXxbywaAt3B8DJx++unKZrM68cQTu75eZbWVK1fqf/7nf1RTU6PTTz/9A5c9depUSdJll13W7fWLL754zSvci3g83uPdZjfffLMWL17cr/sB4C8ejysIgm7v+ly0aJFuv/32HrG1tbU9JiOrX5fUY9tBBx2keDyuM888s0ffd871yGXrQlNTkyZNmqTDDjtMBx98cLf/VufLG2+8MfI4Vm/r7Td3Vj8Ie+/xPfXUU3ryySe7xX35y1+Wc67Xd4X29i7cT37yk7rnnnv0r3/9S/vvv79yuZznEQMbrlKppP/3//6fUqlUjwdNq8XjcX35y1/Wrbfe2uuDknffffcD73ennXbS0KFDdcUVV6hYLHa9fu211/aaL95v9TvNzzjjjB556NBDD9XkyZO7vRv9g+ba3vJQsVjsMa7bcccdNXbsWF100UU9yugtD6VSKc2dO1ef/vSntf/+++vpp582jxXYkO20007KZDJqamrS4sWLu33SL51Oa8cdd9Sll16qjo6Obm/S7K2PtrS09PoGq96s/h3Os846q8e2Qw89VE8++WS339Farbm5ueuNEjU1NV2v+WD8BKy/br/99m7PUJ5++mk99dRT2meffbpeGz9+vObPn99t3PP88893ff3wan3lhhEjRmivvfbq9p/0f1/tefrpp/fIDccff7w233zzbmOaSZMmadGiRfrjH//Y9XWfsVhMEydO1AUXXKBSqdTt9/x6yw3OOc2ePdv7/Bx66KGqVCo6++yze2wrl8uRefDNN9/UI488okMPPbTH8R188ME65phj9Oqrr+qpp56SZOe/3l7v7bnYxRdf3ONTmF/+8pf1/PPP67bbbutRRm/572tf+5p+85vf6IorrtD3vve9Po8RqGZnnHGGamtr9fWvf11Lly7tsf211177QPmiN7lcTnPnztW0adN6zQMnnXSS2tradOedd0rqvzzQ2/PxL3/5y1q+fHnXV8i/V295YK+99tJNN92k++67T0ceeSTfqrcBYNn2Y2DzzTfX73//e331q1/Vdtttp+OOO05jx47VokWLdPXVV2v58uW68cYbu97F/UFMmDBBX/7yl3XRRRdpxYoV+sxnPqO//OUveuWVVySt/e96rTZt2jSdddZZOuaYYzRx4kS98MILampqWuOvswKw9vbbbz9dcMEF+sIXvqCvfOUrWrZsmS699FJtttlmPb5SeMKECXrwwQd1wQUXdH1dyy677KIJEyZIkn70ox9p+vTpSiaT2n///TV+/Hidc845+sEPfqBFixbpwAMPVH19vRYuXKjbbrtNJ5xwgk477bR1dmxPPfWUXn31VZ100km9bh81apR23HFHNTU16Xvf+57Gjx+vAQMG6IorrlB9fb1qa2u1yy67aOzYsZowYYL++Mc/6jvf+Y4+/elPq66uTvvvv7+mTZumuXPn6ktf+pL2228/LVy4UFdccYW22Wabbp9E2mOPPXTkkUfqN7/5jRYsWKAvfOELCsNQjz76qPbYY49e6/iZz3xGd9xxh/bdd18dfPDBuv322813dwEbknvvvVfz58+X9N+vi7rhhhu0YMECff/73+/2Vebv98tf/lLz5s3TLrvsouOPP17bbLONVq5cqWeffVYPPvigVq5c+YHqkUwmdc455+jEE0/UnnvuqcMOO0wLFy7UnDlzvMYwTU1N2n777bXJJpv0uv2AAw7Qt771LT377LPacccdNWHCBF1++eU655xztNlmm2nYsGHac889tf322ysej+tXv/qVWlpalE6nteeee2rixIkaOHCgjjrqKH37299WEAT6wx/+0GMiGIvFdPnll2v//ffX9ttvr2OOOUYjRozQ/Pnz9dJLL/W6aJDNZnX33Xdrzz331D777KO//OUvXr8JCGyIUqmUPv3pT+vRRx9VOp3uGv+sNnHixK5Pbrx30e/zn/+8UqmU9t9/f5144olqb2/Xb3/7Ww0bNkxLliwx99vY2KiTTz6514Wv008/XXfeeaemTZumo48+WhMmTFBHR4deeOEF3XLLLVq0aJGGDBmibDarbbbZRn/84x+1xRZbaNCgQfrEJz7Ra39m/ASs3zbbbDPttttu+sY3vqFCoaCLLrpIgwcP7vY1v8cee6wuuOACTZ06Vccdd5yWLVumK664Qttuu2233/79ILmhUCjo1ltv1d57793n18YdcMABmj17tpYtW6Zhw4Z1Lej9+9//1s9//vOuuN1331333nuv0um0Pv3pT3e9vtVWW2n8+PE67bTTtHjxYjU0NOjWW2/1+h331SZPnqwTTzxRv/jFL/SPf/xDn//855VMJrVgwQLdfPPNmj17tg4++OBe//aGG26Qc04HHHBAr9v33XdfJRIJNTU1Rc6Da2tr+5w7T5s2TX/4wx/U2NiobbbZRk8++aQefPDBbr/jJf03v99yyy065JBDdOyxx2rChAlauXKl7rzzTl1xxRW9ftPESSedpNbWVv3oRz9SY2OjfvjDH3qfN6AajB8/XjfccIMOO+wwbb311vra176mT3ziEyoWi3riiSd088036+ijj+72N6+++qrOOeecHmXtsMMOXb9B+l533nmn2tra+swDn/nMZzR06FA1NTXpsMMO63OONmzYsD7ndb7Px7/2ta/puuuu03e+8x09/fTTmjRpkjo6OvTggw/qm9/8pr74xS/2qN+BBx6oOXPm6Gtf+5oaGhp05ZVXfoAzjPWOw8fGP//5T3f44Ye7ESNGuGQy6TbaaCN3+OGHuxdeeKFb3MyZM50k9+677/YoY/W29+ro6HAzZsxwgwYNcnV1de7AAw90//73v50k98tf/rIrbs6cOU6SW7hwYddro0ePdvvtt1+P/UyePNlNnjy569/5fN5997vfdSNGjHDZbNbtuuuu7sknn+wRt3DhQifJzZkz54OdHADdrO6vzzzzTGTc1Vdf7TbffHOXTqfdVltt5ebMmdNrnpg/f77bfffdXTabdZLcUUcd1bXt7LPPdqNGjXKxWKxHjrj11lvdbrvt5mpra11tba3baqut3IwZM9y///3vrpjJkye7bbfdtkfdVueDc889t8c2SW7mzJl9Hte3vvUtJ8m99tprfcbMmjXLSXLPP/+8c865O+64w22zzTYukUh0y0Pt7e3uK1/5ihswYICT5EaPHu2ccy4MQ/fzn//cjR492qXTabfDDju4u+++2x111FFdMauVy2V37rnnuq222sqlUik3dOhQt88++7i///3v3Y5pxowZ3f7ujjvucIlEwh122GGuUqn0eSzAhmJ17nrvf5lMxm2//fbu8ssvd2EYdovvLRcsXbrUzZgxw22yySZd46XPfe5z7qqrruqKmTdvnpPkbr755m5/29c45LLLLnNjx4516XTa7bTTTu6RRx7pMYZ5v7///e9OkvvJT37SZ8yiRYucJHfqqac655x755133H777efq6+udpG7l//a3v3Xjxo1z8XjcSXLz5s1zzjn3+OOPu8985jMum826kSNHujPOOMPdf//93WJWe+yxx9zee+/t6uvrXW1trfvkJz/pLr744q7tRx11lKutre32N8uXL3fbbLON22ijjdyCBQv6PBZgQ/eDH/zASXITJ07ssW3u3LlOkquvr3flcrnbtjvvvNN98pOfdJlMxo0ZM8b96le/ctdcc02PMVNf46FVq1a5xsbGXsdEbW1t7gc/+IHbbLPNXCqVckOGDHETJ0505513nisWi11xTzzxhJswYYJLpVKRYyjGT8C609v8rLf7rnM9n9u8d150/vnnu0022cSl02k3adKkrr74Xtdff70bN26cS6VSbvvtt3f3339/r33MNzfceuutTpK7+uqr+zy+hx9+2Elys2fP7npt2LBhTpJbunRp12uPPfaYk+QmTZrUo4yXX37Z7bXXXq6urs4NGTLEHX/88e7555/vMTbr67ytdtVVV7kJEya4bDbr6uvr3XbbbefOOOMM9/bbb/f5N9ttt53bdNNN+9zunHNTpkxxw4YNc6VSyTnX9zy4r7nzqlWr3DHHHOOGDBni6urq3NSpU938+fPd6NGju82vnXNuxYoV7qSTTnKjRo1yqVTKbbzxxu6oo45yy5cvd871PZY944wznCR3ySWXRB4LUK1eeeUVd/zxx7sxY8a4VCrl6uvr3a677uouvvhil8/nu+JGjx7dY165+r/jjjuu17L3339/l8lkXEdHR5/7P/roo10ymezqi33N0fqa1/k+H3fOuc7OTvejH/3IjR07tmtee/DBB3eN0/p6ZnbZZZc5Se600077IKcW65nAuV4+0wmspX/84x/aYYcddP311+urX/3qR10dAAAAAACAj51FixZp7NixOvfcc9fpt6UAAID1A7/ph7XW2+8dXHTRRYrFYtp9990/ghoBAAAAAAAAAAB8vPCbflhrv/71r/X3v/9de+yxhxKJhO69917de++9OuGEE/r8DRoAAAAAAAAAAAD0Hxb9sNYmTpyoBx54QGeffbba29u16aabatasWfrRj370UVcNAAAAAAAAAADgY4Hf9AMAAAAAAAAAAACqHL/pBwAAAAAAAAAAAFQ5Fv0AAAAAAAAAAACAKseiH7wsWrRIQRDovPPO67cyH374YQVBoIcffrjfygQAAAAAAAAAAPg4YtFvA3bttdcqCAL97W9/+6ir8qHYe++9FQSBTjrppI+6KgB6EQSB13/r2xsBnnjiCc2aNUvNzc1rVU4Yhrriiiu0/fbbq66uTsOHD9c+++yjJ554on8qCmCtkafIU8D6jBxFjgLWd+Qp8hSwPiNHkaM+LhIfdQWA/jB37lw9+eSTH3U1AET4wx/+0O3f1113nR544IEer2+99dYfZrVMTzzxhM4880wdffTRGjBgwBqXc/rpp+uCCy7QEUccoW9+85tqbm7WlVdeqcmTJ+vxxx/Xzjvv3H+VBrBGyFPkKWB9Ro4iRwHrO/IUeQpYn5GjyFEfFyz6oerl83l997vf1fe+9z399Kc//airA6APRxxxRLd///Wvf9UDDzzQ4/U14ZxTPp9XNptd67LWhXK5rMsvv1wHH3xwt8HkIYcconHjxqmpqYnBFbAeIE+Rp4D1GTmKHAWs78hT5ClgfUaOIkd9XPD1nh9zxWJRP/3pTzVhwgQ1NjaqtrZWkyZN0rx58/r8mwsvvFCjR49WNpvV5MmT9eKLL/aImT9/vg4++GANGjRImUxGO+20k+68806zPp2dnZo/f76WL1/ufQy//vWvFYahTjvtNO+/AbB+mjNnjvbcc08NGzZM6XRa22yzjS6//PIecWPGjNG0adN0//33a6eddlI2m9WVV14pSXrjjTd0wAEHqLa2VsOGDdOpp56q+++/v9evaHjqqaf0hS98QY2Njaqpqel6d9Nqs2bN0umnny5JGjt2bNdXPSxatEiStHz5cs2fP1+dnZ2Rx1UqlZTL5TR8+PBurw8bNkyxWGy9HRQC6Ik8BWB9Ro4CsL4jTwFYn5GjsCHgk34fc62trfrd736nww8/XMcff7za2tp09dVXa+rUqXr66ae1/fbbd4u/7rrr1NbWphkzZiifz2v27Nnac8899cILL3QljZdeekm77rqrRo0ape9///uqra3Vn/70Jx144IG69dZb9aUvfanP+jz99NPaY489NHPmTM2aNcus/3/+8x/98pe/1DXXXENyAjYAl19+ubbddlsdcMABSiQSuuuuu/TNb35TYRhqxowZ3WL//e9/6/DDD9eJJ56o448/XltuuaU6Ojq05557asmSJTr55JO10UYb6YYbbuj1jQwPPfSQ9tlnH02YMEEzZ85ULBbrGtw9+uij2nnnnXXQQQfplVde0Y033qgLL7xQQ4YMkSQNHTpUknTJJZfozDPP1Lx58zRlypQ+jyubzWqXXXbRtddeq89+9rOaNGmSmpubdfbZZ2vgwIE64YQT+u8kAlinyFMA1mfkKADrO/IUgPUZOQobBIcN1pw5c5wk98wzz/QZUy6XXaFQ6PbaqlWr3PDhw92xxx7b9drChQudJJfNZt1bb73V9fpTTz3lJLlTTz2167XPfe5zbrvttnP5fL7rtTAM3cSJE93mm2/e9dq8efOcJDdv3rwer82cOdPrGA8++GA3ceLErn9LcjNmzPD6WwAfrRkzZrj334Y6Ozt7xE2dOtWNGzeu22ujR492ktx9993X7fXzzz/fSXK3335712u5XM5ttdVW3fJNGIZu8803d1OnTnVhGHbb/9ixY93ee+/d9dq5557rJLmFCxf2qNvMmTN75LG+LFiwwO24445OUtd/48aNc/Pnzzf/FsBHgzxFngLWZ+QochSwviNPkaeA9Rk5ihy1oeLrPT/m4vG4UqmUJCkMQ61cuVLlclk77bSTnn322R7xBx54oEaNGtX175133lm77LKL7rnnHknSypUr9dBDD+nQQw9VW1ubli9fruXLl2vFihWaOnWqFixYoMWLF/dZnylTpsg55/Upv3nz5unWW2/VRRdd9MEOGsB6672f2G1padHy5cs1efJkvf7662ppaekWO3bsWE2dOrXba/fdd59GjRqlAw44oOu1TCaj448/vlvcP/7xDy1YsEBf+cpXtGLFiq5c1dHRoc997nN65JFHFIahWd9Zs2bJORf5bqrV6uvrte2222rGjBmaO3euLrvsMpXLZR144IEf6CuNAXy0yFMA1mfkKADrO/IUgPUZOQobAr7eE/r973+v888/X/Pnz1epVOp6fezYsT1iN9988x6vbbHFFvrTn/4kSXr11VflnNNPfvIT/eQnP+l1f8uWLeu2cLgmyuWyvv3tb+vII4/Upz/96bUqC8D64/HHH9fMmTP15JNP9vg+8paWFjU2Nnb9u7cc9cYbb2j8+PEKgqDb65tttlm3fy9YsECSdNRRR/VZl5aWFg0cOPADH0NvyuWy9tprL02ZMkUXX3xx1+t77bWXtt12W5177rn61a9+1S/7ArBukacArM/IUQDWd+QpAOszchQ2BCz6fcxdf/31Ovroo3XggQfq9NNP17BhwxSPx/WLX/xCr7322gcub/U7EE477bQe73RY7f1Jbk1cd911+ve//60rr7yy64dLV2tra9OiRYs0bNgw1dTUrPW+AHw4XnvtNX3uc5/TVlttpQsuuECbbLKJUqmU7rnnHl144YU93uG0Nr/jubqsc889t8dvl65WV1e3xuW/3yOPPKIXX3xRF1xwQbfXN998c2299dbdfqQZwPqLPAVgfUaOArC+I08BWJ+Ro7ChYNHvY+6WW27RuHHjNHfu3G7vQJg5c2av8avfhfBer7zyisaMGSNJGjdunCQpmUxqr7326v8K///+85//qFQqadddd+2x7brrrtN1112n2267TQceeOA6qwOA/nXXXXepUCjozjvv1Kabbtr1em8/dtyX0aNH6+WXX5ZzrltOe/XVV7vFjR8/XpLU0NBg5qr3vztrTSxdulSSVKlUemwrlUoql8trvQ8A6x55CsD6jBwFYH1HngKwPiNHYUPBb/p9zMXjcUmSc67rtaeeekpPPvlkr/G33357t9/ke/rpp/XUU09pn332kSQNGzZMU6ZM0ZVXXqklS5b0+Pt33303sj6dnZ2aP3+++T3C06dP12233dbjP0nad999ddttt2mXXXaJLAPA+qW3fNTS0qI5c+Z4lzF16lQtXrxYd955Z9dr+Xxev/3tb7vFTZgwQePHj9d5552n9vb2HuW8N1fV1tZKkpqbm3vELV++XPPnz+/xlQ/vt8UWW0iSbrrppm6vP/vss/r3v/+tHXbYIfrAAKwXyFMA1mfkKADrO/IUgPUZOQobCj7p9zFwzTXX6L777uvx+sknn6xp06Zp7ty5+tKXvqT99ttPCxcu1BVXXKFtttmm14Sz2WababfddtM3vvENFQoFXXTRRRo8eLDOOOOMrphLL71Uu+22m7bbbjsdf/zxGjdunJYuXaonn3xSb731lp5//vk+6/r0009rjz320MyZMzVr1qw+47baaitttdVWvW4bO3Ysn/ADqtDnP/95pVIp7b///jrxxBPV3t6u3/72txo2bFivbyLozYknnqhLLrlEhx9+uE4++WSNGDFCTU1NymQykv7v3VGxWEy/+93vtM8++2jbbbfVMccco1GjRmnx4sWaN2+eGhoadNddd0n670BMkn70ox9p+vTpSiaT2n///VVbW6tLLrlEZ555pubNmxf5o8kTJkzQ3nvvrd///vdqbW3V5z//eS1ZskQXX3yxstmsTjnllDU/cQA+NOQpAOszchSA9R15CsD6jByFDYbDBmvOnDlOUp//vfnmmy4MQ/fzn//cjR492qXTabfDDju4u+++2x111FFu9OjRXWUtXLjQSXLnnnuuO//8890mm2zi0um0mzRpknv++ed77Pu1115zX/va19xGG23kksmkGzVqlJs2bZq75ZZbumLmzZvnJLl58+b1eG3mzJlrdMyS3IwZM9bobwF8uGbMmOHefxu688473Sc/+UmXyWTcmDFj3K9+9St3zTXXOElu4cKFXXGjR492++23X6/lvv76626//fZz2WzWDR061H33u991t956q5Pk/vrXv3aLfe6559xBBx3kBg8e7NLptBs9erQ79NBD3Z///OducWeffbYbNWqUi8Vi3eoyc+bMHnmsL52dne6ss85y22yzjctms66xsdFNmzbNPffcc+bfAvhokKfIU8D6jBxFjgLWd+Qp8hSwPiNHkaM2VIFz7/m8KgAAG6CLLrpIp556qt566y2NGjXqo64OAPRAngKwPiNHAVjfkacArM/IUfgwsegHANig5HI5ZbPZrn/n83ntsMMOqlQqeuWVVz7CmgHAf5GnAKzPyFEA1nfkKQDrM3IUPmr8ph8AYINy0EEHadNNN9X222+vlpYWXX/99Zo/f76ampo+6qoBgCTyFID1GzkKwPqOPAVgfUaOwkeNRT8AwAZl6tSp+t3vfqempiZVKhVts802uummm3TYYYd91FUDAEnkKQDrN3IUgPUdeQrA+owchY8aX+8JAAAAAAAAAAAAVLnYR10BAAAAAAAAAAAAAGuHRT8AAAAAAAAAAACgyrHoBwAAAAAAAAAAAFS5hG/g935+k0eU/fOAsZi9zmjFBEFglvFhxoRhaMZYv5xYkUddPM5v3C7GS+jsY+robI7c/tbi18wyli5dZMYseedVM6bQ0W7G5FpXmDGZbKMZM3jgRpHb29tXmWU0DIkuQ5LimawZ09FpH1MiYTeKRMLYV8xue80r3jJjKuWCGfOf594wY/pCnuobeap35Km+kaf6tqZ56pLZv1+jv3u/IOaTF4w85pNbvCrTP+U4nxxllOQ86uKznzCsmDEx6/xKinkku2IxH7m9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",
      "text/plain": [
       "<Figure size 1800x400 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# --- 接在您提供的代码之后 ---\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "from torchvision.transforms import transforms\n",
    "\n",
    "# 确保task对象和param对象已经被创建\n",
    "assert 'task' in locals(), \"请确保'task'对象已经被创建！\"\n",
    "assert 'param' in locals(), \"请确保'param'对象已经被创建！\"\n",
    "\n",
    "# ==============================================================================\n",
    "# 第一步：选择并准备一张原始图片（包含两种版本）\n",
    "# ==============================================================================\n",
    "print(\"--- 步骤1: 选择一张原始图片 ---\")\n",
    "sample_idx = 100\n",
    "original_pil_image = task.test_dataset.data[sample_idx]\n",
    "original_label = task.test_dataset.targets[sample_idx]\n",
    "\n",
    "# 版本1: 未经标准化的Tensor，用于最终的可视化\n",
    "# 它的像素值范围是 [0, 1]\n",
    "transform_to_tensor_only = transforms.Compose([\n",
    "    transforms.ToTensor(),\n",
    "])\n",
    "original_tensor_for_viz = transform_to_tensor_only(original_pil_image).to(param.device)\n",
    "\n",
    "# 版本2: 经过标准化的Tensor，用于送入Synthesizer\n",
    "# 这是Synthesizer工作的必需输入\n",
    "transform_with_norm = transforms.Compose([\n",
    "    transforms.ToTensor(),\n",
    "    task.normalize\n",
    "])\n",
    "original_tensor_for_syn = transform_with_norm(original_pil_image).to(param.device)\n",
    "\n",
    "print(f\"已选择索引为 {sample_idx} 的图片，其原始标签为: {original_label} ({task.classes[original_label]})\")\n",
    "\n",
    "# ==============================================================================\n",
    "# 第二步：初始化所有需要对比的攻击合成器（保持不变）\n",
    "# ==============================================================================\n",
    "print(\"\\n--- 步骤2: 初始化各种攻击合成器 ---\")\n",
    "target_label = 8 \n",
    "synthesizers = {\n",
    "    \"Pattern\": PatternSynthesizer(task),\n",
    "    \"Blend\": BlendSynthesizer(task),\n",
    "    \"WaNet\": WaNetSynthesizer(task, dataset='cifar10'),\n",
    "    \"Input-Aware\": InputAwareSynthesizer(task, dataset='cifar10'),\n",
    "    \"CL\": CLSynthesizer(task)\n",
    "}\n",
    "print(f\"已创建 {len(synthesizers)} 种攻击合成器，目标标签为: {target_label} ({task.classes[target_label]})\")\n",
    "\n",
    "# ==============================================================================\n",
    "# 第三步：生成所有攻击版本的图片并准备可视化 (全新逻辑)\n",
    "# ==============================================================================\n",
    "print(\"\\n--- 步骤3: 生成所有攻击版本的图片 ---\")\n",
    "poisoned_images_for_plot = {}\n",
    "\n",
    "# 准备用于计算变化量的标准化参数张量\n",
    "std_tensor = torch.tensor(task.normalize_std).view(3, 1, 1).to(param.device)\n",
    "\n",
    "for name, synthesizer in synthesizers.items():\n",
    "    print(f\"正在应用 {name} 攻击...\")\n",
    "    \n",
    "    # 1. 在标准化的数据上生成后门样本 (与之前相同)\n",
    "    poisoned_tensor_normalized = synthesizer.apply_backdoor_to_a_sample(\n",
    "        data=original_tensor_for_syn.clone(),\n",
    "        label=target_label,\n",
    "        params={}\n",
    "    )\n",
    "    \n",
    "    # 2. 在标准化空间中计算“攻击”引入的变化量 (Delta)\n",
    "    trigger_delta_normalized = poisoned_tensor_normalized - original_tensor_for_syn\n",
    "    \n",
    "    # --- VVVV  核心修改：将变化量应用在颜色正常的图片上  VVVV ---\n",
    "    \n",
    "    # 3. 将标准化的变化量“反向缩放”，得到在[0,1]空间的变化量\n",
    "    #    因为 Normalize 是 (x - mean) / std，所以 (poison - clean) / std = delta_norm\n",
    "    #    我们不需要考虑 mean，因为它在减法中被消掉了。\n",
    "    #    所以，在[0,1]空间的变化量就是 trigger_delta_normalized * std\n",
    "    trigger_delta_visual = trigger_delta_normalized * std_tensor\n",
    "\n",
    "    # 4. 将这个视觉上的变化量，添加到未经标准化的原始图片上\n",
    "    visual_poisoned_tensor = original_tensor_for_viz + trigger_delta_visual\n",
    "    \n",
    "    # 5. 将像素值裁剪到[0,1]范围内，防止溢出\n",
    "    visual_poisoned_tensor = torch.clamp(visual_poisoned_tensor, 0.0, 1.0)\n",
    "    \n",
    "    # --- ^^^^ 修改结束 ^^^^ ---\n",
    "    \n",
    "    # --- 准备可视化 ---\n",
    "    poisoned_tensor_cpu = visual_poisoned_tensor.cpu()\n",
    "    poisoned_images_for_plot[name] = poisoned_tensor_cpu.permute(1, 2, 0).numpy()\n",
    "\n",
    "# 准备原始图片的可视化版本 (无需反标准化)\n",
    "original_image_for_plot = original_tensor_for_viz.cpu().permute(1, 2, 0).numpy()\n",
    "\n",
    "# ==============================================================================\n",
    "# 第四步：使用 Matplotlib 可视化对比 (保持不变)\n",
    "# ==============================================================================\n",
    "print(\"\\n--- 步骤4: 可视化结果 ---\")\n",
    "num_images = len(poisoned_images_for_plot) + 1\n",
    "fig, axes = plt.subplots(1, num_images, figsize=(num_images * 3, 4))\n",
    "\n",
    "axes[0].imshow(original_image_for_plot)\n",
    "axes[0].set_title(f\"Original\\nLabel: {original_label}\")\n",
    "axes[0].axis('off')\n",
    "\n",
    "for i, (name, img) in enumerate(poisoned_images_for_plot.items()):\n",
    "    ax = axes[i+1]\n",
    "    ax.imshow(img)\n",
    "    ax.set_title(f\"{name} Attack\\nTarget: {target_label}\")\n",
    "    ax.axis('off')\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "backdoor",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
